15 instantiations of TypePositionInfo
Microsoft.Interop.ComInterfaceGenerator (3)
VirtualMethodPointerStubGenerator.cs (3)
131
elements.Add(new
TypePositionInfo
(new PointerTypeInfo("void*", "void*", false), methodStub.ManagedThisMarshallingInfo)
152
elements.Add(new
TypePositionInfo
(methodStub.TypeKeyOwner, methodStub.ManagedThisMarshallingInfo)
177
new
TypePositionInfo
(
Microsoft.Interop.JavaScript.JSImportGenerator (2)
JSExportGenerator.cs (1)
158
ImmutableArray<TypePositionInfo> allElements = signatureElements.Add(new
TypePositionInfo
(
JSImportGenerator.cs (1)
116
TypePositionInfo nativeOnlyParameterTemplate = new
TypePositionInfo
(
Microsoft.Interop.SourceGeneration (10)
BoundGenerators.cs (1)
20
IBoundMarshallingGenerator defaultBoundGenerator = fallbackGenerator.Bind(new
TypePositionInfo
(SpecialTypeInfo.Void, NoMarshallingInfo.Instance), context);
Marshalling\AttributedMarshallingModelGeneratorResolver.cs (1)
196
var elementInfo = new
TypePositionInfo
(marshallerData.CollectionElementType, marshallerData.CollectionElementMarshallingInfo)
Marshalling\StatefulMarshallingStrategy.cs (1)
241
new
TypePositionInfo
(SpecialTypeInfo.Int32, NoMarshallingInfo.Instance)
Marshalling\StatelessMarshallingStrategy.cs (1)
241
new
TypePositionInfo
(SpecialTypeInfo.Int32, NoMarshallingInfo.Instance)
MarshallingInfoParser.cs (2)
318
info = new
TypePositionInfo
(SpecialTypeInfo.Void, NoMarshallingInfo.Instance);
347
info = new
TypePositionInfo
(SpecialTypeInfo.Void, NoMarshallingInfo.Instance);
MethodSignatureElementInfoProvider.cs (1)
34
info = new
TypePositionInfo
(
SignatureContext.cs (2)
138
TypePositionInfo retTypeInfo =
new
(ManagedTypeInfo.CreateTypeInfoForTypeSymbol(method.ReturnType), marshallingInfoParser.ParseMarshallingInfo(method.ReturnType, returnAttributes));
159
return new
TypePositionInfo
(errorInfo.ManagedType, errorInfo.MarshallingInfo)
TypePositionInfo.cs (1)
89
var typeInfo = new
TypePositionInfo
(ManagedTypeInfo.CreateTypeInfoForTypeSymbol(paramSymbol.Type), marshallingInfo)
353 references to TypePositionInfo
Microsoft.Interop.ComInterfaceGenerator (62)
Analyzers\ConvertComImportToGeneratedComInterfaceAnalyzer.cs (4)
176
private static bool HasUnsupportedMarshalAsInfo(
TypePositionInfo
info)
192
private readonly Func<
TypePositionInfo
, StubCodeContext, ResolvedGenerator> _func;
194
public CallbackGeneratorResolver(Func<
TypePositionInfo
, StubCodeContext, ResolvedGenerator> func)
199
public ResolvedGenerator Create(
TypePositionInfo
info, StubCodeContext context) => _func(info, context);
ComInterfaceGenerator.cs (4)
244
TypePositionInfo
? managedReturnInfo = signatureContext.ElementTypeInformation.FirstOrDefault(e => e.IsManagedReturnPosition);
258
TypePositionInfo
? managedReturnInfo = signatureContext.ElementTypeInformation.FirstOrDefault(e => e.IsManagedReturnPosition);
274
foreach (
TypePositionInfo
parameter in signatureContext.ManagedParameters)
789
ImmutableArray<
TypePositionInfo
> managedParams = sigContext.ManagedParameters.ToImmutableArray();
Marshallers\ComInterfaceDispatchMarshallingResolver.cs (7)
13
public ResolvedGenerator Create(
TypePositionInfo
info, StubCodeContext context)
29
public ManagedTypeInfo AsNativeType(
TypePositionInfo
info) =>
34
public void Generate(IndentedTextWriter writer,
TypePositionInfo
info, StubCodeContext codeContext, StubIdentifierContext context)
46
public SignatureBehavior GetNativeSignatureBehavior(
TypePositionInfo
info) => SignatureBehavior.NativeType;
47
public ValueBoundaryBehavior GetValueBoundaryBehavior(
TypePositionInfo
info, StubCodeContext context) => ValueBoundaryBehavior.NativeIdentifier;
48
public ByValueMarshalKindSupport SupportsByValueMarshalKind(ByValueContentsMarshalKind marshalKind,
TypePositionInfo
info, out GeneratorDiagnostic? diagnostic)
50
public bool UsesNativeIdentifier(
TypePositionInfo
info, StubCodeContext context) => true;
Marshallers\KeepAliveThisMarshaller.cs (6)
10
public ManagedTypeInfo AsNativeType(
TypePositionInfo
info) => info.ManagedType;
11
public void Generate(IndentedTextWriter writer,
TypePositionInfo
info, StubCodeContext codeContext, StubIdentifierContext context)
21
public SignatureBehavior GetNativeSignatureBehavior(
TypePositionInfo
info) => SignatureBehavior.NativeType;
22
public ValueBoundaryBehavior GetValueBoundaryBehavior(
TypePositionInfo
info, StubCodeContext context) => ValueBoundaryBehavior.ManagedIdentifier;
23
public ByValueMarshalKindSupport SupportsByValueMarshalKind(ByValueContentsMarshalKind marshalKind,
TypePositionInfo
info, out GeneratorDiagnostic? diagnostic)
26
public bool UsesNativeIdentifier(
TypePositionInfo
info, StubCodeContext context) => false;
Marshallers\ManagedHResultExceptionGeneratorResolver.cs (13)
13
public ResolvedGenerator Create(
TypePositionInfo
info, StubCodeContext context)
32
public ManagedTypeInfo AsNativeType(
TypePositionInfo
info) => info.ManagedType;
33
public void Generate(IndentedTextWriter writer,
TypePositionInfo
info, StubCodeContext codeContext, StubIdentifierContext context)
48
public SignatureBehavior GetNativeSignatureBehavior(
TypePositionInfo
info) => SignatureBehavior.NativeType;
49
public ValueBoundaryBehavior GetValueBoundaryBehavior(
TypePositionInfo
info, StubCodeContext context) => ValueBoundaryBehavior.ManagedIdentifier;
50
public ByValueMarshalKindSupport SupportsByValueMarshalKind(ByValueContentsMarshalKind marshalKind,
TypePositionInfo
info, out GeneratorDiagnostic? diagnostic)
52
public bool UsesNativeIdentifier(
TypePositionInfo
info, StubCodeContext context) => false;
57
public ManagedTypeInfo AsNativeType(
TypePositionInfo
info) => info.ManagedType;
58
public void Generate(IndentedTextWriter writer,
TypePositionInfo
info, StubCodeContext codeContext, StubIdentifierContext context)
72
public SignatureBehavior GetNativeSignatureBehavior(
TypePositionInfo
info) => SignatureBehavior.NativeType;
73
public ValueBoundaryBehavior GetValueBoundaryBehavior(
TypePositionInfo
info, StubCodeContext context) => ValueBoundaryBehavior.ManagedIdentifier;
74
public ByValueMarshalKindSupport SupportsByValueMarshalKind(ByValueContentsMarshalKind marshalKind,
TypePositionInfo
info, out GeneratorDiagnostic? diagnostic)
76
public bool UsesNativeIdentifier(
TypePositionInfo
info, StubCodeContext context) => false;
Marshallers\ObjectUnwrapperResolver.cs (7)
12
public ResolvedGenerator Create(
TypePositionInfo
info, StubCodeContext context)
28
public ManagedTypeInfo AsNativeType(
TypePositionInfo
info) => new PointerTypeInfo("void*", "void*", false);
29
public void Generate(IndentedTextWriter writer,
TypePositionInfo
info, StubCodeContext codeContext, StubIdentifierContext context)
43
public SignatureBehavior GetNativeSignatureBehavior(
TypePositionInfo
info) => SignatureBehavior.NativeType;
44
public ValueBoundaryBehavior GetValueBoundaryBehavior(
TypePositionInfo
info, StubCodeContext context) => ValueBoundaryBehavior.NativeIdentifier;
45
public ByValueMarshalKindSupport SupportsByValueMarshalKind(ByValueContentsMarshalKind marshalKind,
TypePositionInfo
info, out GeneratorDiagnostic? diagnostic)
47
public bool UsesNativeIdentifier(
TypePositionInfo
info, StubCodeContext context) => true;
Marshallers\StructAsHResultMarshallerFactory.cs (7)
12
public ResolvedGenerator Create(
TypePositionInfo
info, StubCodeContext context)
25
public ManagedTypeInfo AsNativeType(
TypePositionInfo
info) => SpecialTypeInfo.Int32;
27
public void Generate(IndentedTextWriter writer,
TypePositionInfo
info, StubCodeContext codeContext, StubIdentifierContext context)
50
public SignatureBehavior GetNativeSignatureBehavior(
TypePositionInfo
info)
55
public ValueBoundaryBehavior GetValueBoundaryBehavior(
TypePositionInfo
info, StubCodeContext context)
65
public ByValueMarshalKindSupport SupportsByValueMarshalKind(ByValueContentsMarshalKind marshalKind,
TypePositionInfo
info, out GeneratorDiagnostic? diagnostic)
68
public bool UsesNativeIdentifier(
TypePositionInfo
info, StubCodeContext context) => true;
VirtualMethodPointerStubGenerator.cs (14)
26
ImmutableArray<
TypePositionInfo
> elements = methodStub.VtableIndexData.ImplicitThisParameter
126
private static ImmutableArray<
TypePositionInfo
> AddManagedToUnmanagedImplicitThis(SourceAvailableIncrementalMethodStubGenerationContext methodStub)
128
ImmutableArray<
TypePositionInfo
> originalElements = methodStub.SignatureContext.ElementTypeInformation;
129
var elements = ImmutableArray.CreateBuilder<
TypePositionInfo
>(originalElements.Length + 2);
136
foreach (
TypePositionInfo
element in originalElements)
140
NativeIndex =
TypePositionInfo
.IncrementIndex(element.NativeIndex)
147
private static ImmutableArray<
TypePositionInfo
> AddUnmanagedToManagedImplicitElementInfos(IncrementalMethodStubGenerationContext methodStub)
149
ImmutableArray<
TypePositionInfo
> originalElements = methodStub.SignatureContext.ElementTypeInformation;
150
var elements = ImmutableArray.CreateBuilder<
TypePositionInfo
>(originalElements.Length + 2);
157
foreach (
TypePositionInfo
element in originalElements)
159
TypePositionInfo
unmanagedToManagedElement = element;
170
NativeIndex =
TypePositionInfo
.IncrementIndex(unmanagedToManagedElement.NativeIndex)
182
ManagedIndex =
TypePositionInfo
.ExceptionIndex,
183
NativeIndex =
TypePositionInfo
.ReturnIndex,
Microsoft.Interop.JavaScript.JSImportGenerator (34)
JSExportGenerator.cs (7)
157
ImmutableArray<
TypePositionInfo
> signatureElements = incrementalContext.SignatureContext.SignatureContext.ElementTypeInformation;
158
ImmutableArray<
TypePositionInfo
> allElements = signatureElements.Add(new TypePositionInfo(
166
ManagedIndex =
TypePositionInfo
.ExceptionIndex,
179
ManagedIndex =
TypePositionInfo
.ReturnIndex,
231
ImmutableArray<
TypePositionInfo
> signatureElements,
236
foreach (
TypePositionInfo
nativeArgument in signatureElements.Where(static element => element.NativeIndex !=
TypePositionInfo
.UnsetIndex).OrderBy(static element => element.NativeIndex))
JSGeneratorFactory.cs (5)
17
public ResolvedGenerator Create(
TypePositionInfo
info, StubCodeContext context)
29
if (MarshallerHelpers.GetMarshalDirection(info, context) != MarshalDirection.UnmanagedToManaged && info.ManagedIndex ==
TypePositionInfo
.UnsetIndex)
38
public static (MarshalerType BaseType, IEnumerable<MarshalerType>? SubTypes) GetMarshallerTypeForBinding(
TypePositionInfo
info, StubCodeContext context)
46
private static ResolvedGeneratorAndType Create(
TypePositionInfo
info, JSMarshallingInfo jsMarshalingInfo, StubCodeContext context)
91
private static ResolvedGeneratorAndType Create(
TypePositionInfo
info, StubCodeContext context, bool isToJs, KnownManagedType marshaledType, KnownManagedType[] argumentTypes, JSTypeFlags jsType, SequenceEqualImmutableArray<JSTypeFlags>? jsTypeArguments)
JSImportGenerator.cs (7)
113
ImmutableArray<
TypePositionInfo
> originalElementInfo = incrementalContext.SignatureContext.SignatureContext.ElementTypeInformation;
114
ImmutableArray<
TypePositionInfo
>.Builder typeInfoBuilder = ImmutableArray.CreateBuilder<
TypePositionInfo
>(originalElementInfo.Length + NumImplicitArguments);
116
TypePositionInfo
nativeOnlyParameterTemplate = new TypePositionInfo(
120
ManagedIndex =
TypePositionInfo
.UnsetIndex,
135
foreach (
TypePositionInfo
info in originalElementInfo)
138
TypePositionInfo
updatedInfo = info with
JSMarshallingInfo.cs (4)
21
private SequenceEqualImmutableArray<
TypePositionInfo
> _elementDependencies = new(ImmutableArray<
TypePositionInfo
>.Empty);
22
public override IEnumerable<
TypePositionInfo
> ElementDependencies => _elementDependencies;
24
public JSMarshallingInfo AddElementDependencies(IEnumerable<
TypePositionInfo
> elementDependencies)
JSSignatureContext.cs (1)
55
foreach (
var
param in sigContext.ElementTypeInformation)
Marshaling\BaseJSGenerator.cs (2)
8
internal abstract class BaseJSGenerator(
TypePositionInfo
info, StubCodeContext codeContext) : IBoundMarshallingGenerator
12
public
TypePositionInfo
TypeInfo => info;
Marshaling\FuncJSGenerator.cs (1)
9
internal sealed class FuncJSGenerator(
TypePositionInfo
info, StubCodeContext context, bool isAction, MarshalerType[] argumentMarshalerTypes) : BaseJSGenerator(info, context)
Marshaling\ImplicitArgumentGenerator.cs (1)
6
internal sealed class ImplicitArgumentGenerator(
TypePositionInfo
info, StubCodeContext codeContext) : BaseJSGenerator(info, codeContext)
Marshaling\PrimitiveJSGenerator.cs (1)
8
internal sealed class PrimitiveJSGenerator(
TypePositionInfo
info, StubCodeContext context, MarshalerType elementMarshallerType) : BaseJSGenerator(info, context)
Marshaling\TaskJSGenerator.cs (1)
8
internal sealed class TaskJSGenerator(
TypePositionInfo
info, StubCodeContext context, MarshalerType resultMarshalerType) : BaseJSGenerator(info, context)
NoSpanAndTaskMixingResolver.cs (1)
15
public ResolvedGenerator Create(
TypePositionInfo
info, StubCodeContext context)
SignatureBindingHelpers.cs (3)
12
public static string CreateSignaturesArgument(ImmutableArray<
TypePositionInfo
> elements, StubCodeContext context)
17
foreach (
TypePositionInfo
element in elements.Where(static element => element.NativeIndex !=
TypePositionInfo
.UnsetIndex).OrderBy(static element => element.NativeIndex))
Microsoft.Interop.LibraryImportGenerator (4)
Analyzers\ConvertToLibraryImportAnalyzer.cs (3)
201
private static bool HasUnsupportedMarshalAsInfo(
TypePositionInfo
info)
230
private sealed class CallbackGeneratorResolver(Func<
TypePositionInfo
, StubCodeContext, ResolvedGenerator> func) : IMarshallingGeneratorResolver
232
public ResolvedGenerator Create(
TypePositionInfo
info, StubCodeContext context) => func(info, context);
ForwarderResolver.cs (1)
14
public ResolvedGenerator Create(
TypePositionInfo
info, StubCodeContext context) => ResolvedGenerator.Resolved(s_forwarder.Bind(info, context));
Microsoft.Interop.LibraryImportGenerator.Downlevel (1)
ForwarderResolver.cs (1)
14
public ResolvedGenerator Create(
TypePositionInfo
info, StubCodeContext context) => ResolvedGenerator.Resolved(s_forwarder.Bind(info, context));
Microsoft.Interop.SourceGeneration (252)
BoundGenerators.cs (17)
18
public static BoundGenerators Create(ImmutableArray<
TypePositionInfo
> elementTypeInfo, IMarshallingGeneratorResolver generatorResolver, StubCodeContext context, IUnboundMarshallingGenerator fallbackGenerator, out ImmutableArray<GeneratorDiagnostic> generatorBindingDiagnostics)
30
TypePositionInfo
? errorHandlingInfo = null;
32
foreach (
TypePositionInfo
argType in elementTypeInfo)
55
if (!
TypePositionInfo
.IsSpecialIndex(argType.ManagedIndex))
59
if (!
TypePositionInfo
.IsSpecialIndex(argType.NativeIndex))
87
else if (!
TypePositionInfo
.IsSpecialIndex(errorHandlingInfo.NativeIndex))
101
else if (errorHandlingInfo.NativeIndex is not (
TypePositionInfo
.UnsetIndex or
TypePositionInfo
.ExceptionIndex))
130
if (overlappedMarshaller is null && !
TypePositionInfo
.IsSpecialIndex(errorHandlingInfo.NativeIndex))
180
static IEnumerable<(bool IsManagedIndex, int Index)> GetInfoDependencies(
TypePositionInfo
info)
183
if (info.ManagedIndex ==
TypePositionInfo
.UnsetIndex)
191
static (bool IsManagedIndex, int Index) GetInfoIndex(
TypePositionInfo
info)
202
if (info.ManagedIndex !=
TypePositionInfo
.UnsetIndex)
209
IBoundMarshallingGenerator? FindOverlappedMarshaller(
TypePositionInfo
info)
218
return
TypePositionInfo
.IsSpecialIndex(info.NativeIndex)
224
IBoundMarshallingGenerator CreateGenerator(
TypePositionInfo
p, IMarshallingGeneratorResolver factory)
266
public ResolvedGenerator Create(
TypePositionInfo
info, StubCodeContext context)
ComInterfaceMarshallingInfoProvider.cs (1)
35
TypePositionInfo
? iidParameterIndexInfo = null)
DefaultIdentifierContext.cs (5)
15
private readonly
TypePositionInfo
? _errorHandlingOverlappedPosition;
21
TypePositionInfo
? errorHandlingOverlappedPosition = null)
29
public override (string managed, string native) GetIdentifiers(
TypePositionInfo
info)
34
ManagedIndex:
TypePositionInfo
.ErrorIndex,
73
public override string GetAdditionalIdentifier(
TypePositionInfo
info, string name)
EmptyElementInfoProvider.cs (2)
22
public bool TryGetInfoForElementName(AttributeData attrData, string elementName, GetMarshallingInfoCallback marshallingInfoCallback, IElementInfoProvider rootProvider, out
TypePositionInfo
info)
28
public bool TryGetInfoForParamIndex(AttributeData attrData, int paramIndex, GetMarshallingInfoCallback marshallingInfoCallback, IElementInfoProvider rootProvider, out
TypePositionInfo
info)
LinearCollectionElementIdentifierContext.cs (4)
12
private readonly
TypePositionInfo
_elementInfo;
29
TypePositionInfo
elementInfo,
46
public override (string managed, string native) GetIdentifiers(
TypePositionInfo
info)
63
public override string GetAdditionalIdentifier(
TypePositionInfo
info, string name)
ManagedToNativeStubGenerator.cs (4)
31
ImmutableArray<
TypePositionInfo
> argTypes,
43
TypePositionInfo
? errorHandlingInfo = argTypes.FirstOrDefault(static info => info.IsErrorHandlingPosition);
44
TypePositionInfo
? errorHandlingOverlappedPosition = errorHandlingInfo is null
87
public string GetNativeIdentifier(
TypePositionInfo
info)
MarshalAsParser.cs (8)
60
TypePositionInfo
? IidParameterIndexInfo) : MarshalAsInfo(UnmanagedType, CharEncoding)
62
public override IEnumerable<
TypePositionInfo
> ElementDependencies
69
if (IidParameterIndexInfo is { ManagedIndex: int paramIndex } && !
TypePositionInfo
.IsSpecialIndex(paramIndex))
143
TypePositionInfo
? iidParameterIndexInfo = null;
150
if (!elementInfoProvider.TryGetInfoForParamIndex(attributeData, (short)sizeParamIndexArg.Value!, marshallingInfoCallback, out
TypePositionInfo
paramIndexInfo))
219
TypePositionInfo
? iidParameterIndexInfo = null;
257
private static bool IsGuidType(
TypePositionInfo
info)
263
private static bool IsValidIidParameter(
TypePositionInfo
info)
Marshalling\AttributedMarshallingModelGeneratorResolver.cs (11)
39
public ResolvedGenerator Create(
TypePositionInfo
info, StubCodeContext context)
49
private GeneratorDiagnostic.NotSupported? ValidateCountInfo(
TypePositionInfo
info, CountInfo count, StubCodeContext context, out bool countInfoRequiresCast)
56
SizeAndParamIndexInfo(_,
TypePositionInfo
param) => ValidateNumElementsExpression(param, out countInfoRequiresCast),
57
CountElementCountInfo(
TypePositionInfo
elementInfo) => ValidateNumElementsExpression(elementInfo, out countInfoRequiresCast),
64
GeneratorDiagnostic.NotSupported? ValidateNumElementsExpression(
TypePositionInfo
paramInfo, out bool requiresCast)
115
private CustomTypeMarshallerData GetMarshallerDataForTypePositionInfo(CustomTypeMarshallers marshallers,
TypePositionInfo
info, StubCodeContext context)
128
private ResolvedGenerator CreateCustomNativeTypeMarshaller(
TypePositionInfo
info, StubCodeContext context, NativeMarshallingAttributeInfo marshalInfo)
191
TypePositionInfo
info,
196
var
elementInfo = new TypePositionInfo(marshallerData.CollectionElementType, marshallerData.CollectionElementMarshallingInfo)
333
private static FreeStrategy GetFreeStrategy(
TypePositionInfo
info, StubCodeContext context)
376
private GeneratorDiagnostic.NotSupported? ValidateCustomNativeTypeMarshallingSupported(
TypePositionInfo
info, StubCodeContext context, NativeMarshallingAttributeInfo marshalInfo)
Marshalling\BlittableMarshaller.cs (6)
8
public ManagedTypeInfo AsNativeType(
TypePositionInfo
info)
13
public SignatureBehavior GetNativeSignatureBehavior(
TypePositionInfo
info)
18
public ValueBoundaryBehavior GetValueBoundaryBehavior(
TypePositionInfo
info, StubCodeContext context)
31
public void Generate(IndentedTextWriter writer,
TypePositionInfo
info, StubCodeContext codeContext, StubIdentifierContext context)
71
public bool UsesNativeIdentifier(
TypePositionInfo
info, StubCodeContext context)
76
public ByValueMarshalKindSupport SupportsByValueMarshalKind(ByValueContentsMarshalKind marshalKind,
TypePositionInfo
info, out GeneratorDiagnostic? diagnostic)
Marshalling\BlittableMarshallerResolver.cs (1)
23
public ResolvedGenerator Create(
TypePositionInfo
info, StubCodeContext context)
Marshalling\BoolMarshaller.cs (6)
24
public ManagedTypeInfo AsNativeType(
TypePositionInfo
info)
30
public SignatureBehavior GetNativeSignatureBehavior(
TypePositionInfo
info)
35
public ValueBoundaryBehavior GetValueBoundaryBehavior(
TypePositionInfo
info, StubCodeContext context)
45
public void Generate(IndentedTextWriter writer,
TypePositionInfo
info, StubCodeContext codeContext, StubIdentifierContext context)
76
public bool UsesNativeIdentifier(
TypePositionInfo
info, StubCodeContext context) => true;
78
public ByValueMarshalKindSupport SupportsByValueMarshalKind(ByValueContentsMarshalKind marshalKind,
TypePositionInfo
info, out GeneratorDiagnostic? diagnostic)
Marshalling\BreakingChangeDetector.cs (1)
17
public ResolvedGenerator Create(
TypePositionInfo
info, StubCodeContext context)
Marshalling\ByValueContentsMarshalKindValidator.cs (1)
22
public ResolvedGenerator Create(
TypePositionInfo
info, StubCodeContext context)
Marshalling\ByValueMarshalKindSupportDescriptor.cs (2)
11
public ByValueMarshalKindSupport GetSupport(
TypePositionInfo
info, out GeneratorDiagnostic? diagnostic)
62
public ByValueMarshalKindSupport GetSupport(ByValueContentsMarshalKind marshalKind,
TypePositionInfo
info, out GeneratorDiagnostic? diagnostic)
Marshalling\CharMarshaller.cs (7)
13
public ValueBoundaryBehavior GetValueBoundaryBehavior(
TypePositionInfo
info, StubCodeContext context)
31
public ManagedTypeInfo AsNativeType(
TypePositionInfo
info)
37
public SignatureBehavior GetNativeSignatureBehavior(
TypePositionInfo
info)
42
public void Generate(IndentedTextWriter writer,
TypePositionInfo
info, StubCodeContext codeContext, StubIdentifierContext context)
91
public bool UsesNativeIdentifier(
TypePositionInfo
info, StubCodeContext context)
97
private static bool IsPinningPathSupported(
TypePositionInfo
info, StubCodeContext context)
105
public ByValueMarshalKindSupport SupportsByValueMarshalKind(ByValueContentsMarshalKind marshalKind,
TypePositionInfo
info, out GeneratorDiagnostic? diagnostic)
Marshalling\CharMarshallingGeneratorResolver.cs (2)
24
public ResolvedGenerator Create(
TypePositionInfo
info, StubCodeContext context)
34
private ResolvedGenerator CreateCharMarshaller(
TypePositionInfo
info, StubCodeContext context)
Marshalling\CompositeMarshallingGeneratorResolver.cs (1)
26
public ResolvedGenerator Create(
TypePositionInfo
info, StubCodeContext context)
Marshalling\CustomTypeMarshallingGenerator.cs (1)
18
public
TypePositionInfo
TypeInfo => nativeTypeMarshaller.TypeInfo;
Marshalling\DelegateMarshaller.cs (6)
8
public ManagedTypeInfo AsNativeType(
TypePositionInfo
info)
13
public SignatureBehavior GetNativeSignatureBehavior(
TypePositionInfo
info)
18
public ValueBoundaryBehavior GetValueBoundaryBehavior(
TypePositionInfo
info, StubCodeContext context)
23
public void Generate(IndentedTextWriter writer,
TypePositionInfo
info, StubCodeContext codeContext, StubIdentifierContext context)
56
public bool UsesNativeIdentifier(
TypePositionInfo
info, StubCodeContext context) => true;
58
public ByValueMarshalKindSupport SupportsByValueMarshalKind(ByValueContentsMarshalKind marshalKind,
TypePositionInfo
info, out GeneratorDiagnostic? diagnostic)
Marshalling\ElementsMarshalling.cs (9)
13
TypePositionInfo
TypeInfo { get; }
50
SizeAndParamIndexInfo(SizeAndParamIndexInfo.UnspecifiedConstSize,
TypePositionInfo
param) => (GetExpressionForParam(param), false),
51
SizeAndParamIndexInfo(int size,
TypePositionInfo
param) => ($"{GetConstSizeExpression(size)} + {GetExpressionForParam(param)}", true),
52
CountElementCountInfo(
TypePositionInfo
elementInfo) => (GetExpressionForParam(elementInfo), false),
66
string GetExpressionForParam(
TypePositionInfo
paramInfo)
80
public static void GenerateNumElementsAssignmentFromManagedValuesSource(this IElementsMarshallingCollectionSource source, IndentedTextWriter writer,
TypePositionInfo
info, StubIdentifierContext context)
86
public static void GenerateNumElementsAssignmentFromManagedValuesDestination(this IElementsMarshallingCollectionSource source, IndentedTextWriter writer,
TypePositionInfo
info, StubIdentifierContext context)
347
private static bool UsesLastIndexMarshalled(
TypePositionInfo
info, StubCodeContext context)
353
private static bool ShouldCleanUpAllElements(
TypePositionInfo
info, StubCodeContext context)
Marshalling\Forwarder.cs (6)
8
public ManagedTypeInfo AsNativeType(
TypePositionInfo
info)
13
public SignatureBehavior GetNativeSignatureBehavior(
TypePositionInfo
info)
18
public ValueBoundaryBehavior GetValueBoundaryBehavior(
TypePositionInfo
info, StubCodeContext context)
23
public void Generate(IndentedTextWriter writer,
TypePositionInfo
info, StubCodeContext codeContext, StubIdentifierContext context)
27
public bool UsesNativeIdentifier(
TypePositionInfo
info, StubCodeContext context) => false;
29
public ByValueMarshalKindSupport SupportsByValueMarshalKind(ByValueContentsMarshalKind marshalKind,
TypePositionInfo
info, out GeneratorDiagnostic? diagnostic)
Marshalling\GeneratorDiagnostic.cs (5)
13
private GeneratorDiagnostic(
TypePositionInfo
typePositionInfo, bool isFatal)
23
public
TypePositionInfo
TypePositionInfo { get; }
28
public sealed record NotSupported(
TypePositionInfo
TypePositionInfo) : GeneratorDiagnostic(TypePositionInfo, isFatal: true)
45
public sealed record UnnecessaryData(
TypePositionInfo
TypePositionInfo, ImmutableArray<Location> UnnecessaryDataLocations) : GeneratorDiagnostic(TypePositionInfo, isFatal: false)
64
public sealed record NotRecommended(
TypePositionInfo
TypePositionInfo) : GeneratorDiagnostic(TypePositionInfo, isFatal: false)
Marshalling\GenericFriendlyPointerIdentifierContext.cs (4)
14
private readonly
TypePositionInfo
_adaptedInfo;
17
public GenericFriendlyPointerIdentifierContext(StubIdentifierContext inner,
TypePositionInfo
adaptedInfo, string baseIdentifier)
25
public override (string managed, string native) GetIdentifiers(
TypePositionInfo
info)
36
public override string GetAdditionalIdentifier(
TypePositionInfo
info, string name) => _innerContext.GetAdditionalIdentifier(info, name);
Marshalling\ICustomTypeMarshallingStrategy.cs (1)
11
TypePositionInfo
TypeInfo { get; }
Marshalling\IidParameterIndexMarshallerResolver.cs (8)
8
public ResolvedGenerator Create(
TypePositionInfo
info, StubCodeContext context)
19
private sealed class Marshaller(
TypePositionInfo
iidParameterIndexInfo) : IUnboundMarshallingGenerator
21
public ManagedTypeInfo AsNativeType(
TypePositionInfo
info) => new PointerTypeInfo("void*", "void*", false);
23
public SignatureBehavior GetNativeSignatureBehavior(
TypePositionInfo
info) => info.IsByRef ? SignatureBehavior.PointerToNativeType : SignatureBehavior.NativeType;
25
public ValueBoundaryBehavior GetValueBoundaryBehavior(
TypePositionInfo
info, StubCodeContext context)
28
public ByValueMarshalKindSupport SupportsByValueMarshalKind(ByValueContentsMarshalKind marshalKind,
TypePositionInfo
info, out GeneratorDiagnostic? diagnostic)
31
public bool UsesNativeIdentifier(
TypePositionInfo
info, StubCodeContext context) => true;
33
public void Generate(IndentedTextWriter writer,
TypePositionInfo
info, StubCodeContext codeContext, StubIdentifierContext context)
Marshalling\IMarshallingGeneratorResolver.cs (1)
17
TypePositionInfo
info,
Marshalling\MarshalAsMarshallingGeneratorResolver.cs (1)
35
TypePositionInfo
info,
Marshalling\MarshallerHelpers.cs (20)
52
public static string GetMarshallerIdentifier(
TypePositionInfo
info, StubIdentifierContext context)
57
public static string GetManagedSpanIdentifier(
TypePositionInfo
info, StubIdentifierContext context)
62
public static string GetNativeSpanIdentifier(
TypePositionInfo
info, StubIdentifierContext context)
67
public static string GetNumElementsIdentifier(
TypePositionInfo
info, StubIdentifierContext context)
72
public static string GetLastIndexMarshalledIdentifier(
TypePositionInfo
info, StubIdentifierContext context)
82
public static string GetIndexedManagedElementExpression(
TypePositionInfo
info, StubCodeContext codeContext, StubIdentifierContext context)
92
internal static bool CanUseCallerAllocatedBuffer(
TypePositionInfo
info, StubCodeContext context)
219
public static string SkipInitOrDefaultInit(
TypePositionInfo
info, StubIdentifierContext context)
236
public static string DefaultInit(
TypePositionInfo
info, StubIdentifierContext context)
250
public static MarshalDirection GetMarshalDirection(
TypePositionInfo
info, StubCodeContext context)
312
public static StubIdentifierContext.Stage GetCleanupStage(
TypePositionInfo
info, StubCodeContext context)
334
public static void ValidateCountInfoAvailableAtCall(MarshalDirection stubDirection,
TypePositionInfo
info, GeneratorDiagnosticsBag generatorDiagnostics, IMethodSymbol symbol, DiagnosticDescriptor outParamDescriptor, DiagnosticDescriptor returnValueDescriptor)
342
|| info.ManagedIndex is
TypePositionInfo
.ReturnIndex)
348
Location location =
TypePositionInfo
.GetLocation(info, symbol);
356
else if (countInfo.ElementInfo.ManagedIndex is
TypePositionInfo
.ReturnIndex)
358
Location location =
TypePositionInfo
.GetLocation(info, symbol);
369
public static string GetManagedParameterModifiers(
TypePositionInfo
typeInfo)
411
public static string GetManagedArgumentRefKindKeyword(
TypePositionInfo
typeInfo)
429
public static bool IsInStubReturnPosition(
TypePositionInfo
info, MarshalDirection direction)
444
public static bool IsInInvocationReturnPosition(
TypePositionInfo
info, MarshalDirection direction)
Marshalling\MarshallingGenerator.cs (10)
82
TypePositionInfo
TypeInfo { get; }
150
internal sealed class BoundMarshallingGenerator(
TypePositionInfo
info, StubCodeContext context, IUnboundMarshallingGenerator unbound) : IBoundMarshallingGenerator
156
public
TypePositionInfo
TypeInfo => info;
183
public static IBoundMarshallingGenerator Bind(this IUnboundMarshallingGenerator unbound,
TypePositionInfo
info, StubCodeContext context) => new BoundMarshallingGenerator(info, context, unbound);
196
ManagedTypeInfo AsNativeType(
TypePositionInfo
info);
203
SignatureBehavior GetNativeSignatureBehavior(
TypePositionInfo
info);
211
ValueBoundaryBehavior GetValueBoundaryBehavior(
TypePositionInfo
info, StubCodeContext context);
226
void Generate(IndentedTextWriter writer,
TypePositionInfo
info, StubCodeContext codeContext, StubIdentifierContext context);
235
bool UsesNativeIdentifier(
TypePositionInfo
info, StubCodeContext context);
248
ByValueMarshalKindSupport SupportsByValueMarshalKind(ByValueContentsMarshalKind marshalKind,
TypePositionInfo
info, out GeneratorDiagnostic? diagnostic);
Marshalling\MarshallingGeneratorExtensions.cs (3)
92
private static GeneratedParameter GenerateForwardingParameter(
TypePositionInfo
info, string identifier)
121
TypePositionInfo
info = generator.TypeInfo;
136
TypePositionInfo
info = generator.TypeInfo;
Marshalling\NoMarshallingInfoErrorResolver.cs (1)
15
TypePositionInfo
info,
Marshalling\NotSupportedResolver.cs (1)
8
public ResolvedGenerator Create(
TypePositionInfo
info, StubCodeContext context) =>
Marshalling\ResolvedGenerator.cs (1)
25
public static ResolvedGenerator NotSupported(
TypePositionInfo
info, StubCodeContext context, GeneratorDiagnostic.NotSupported notSupportedDiagnostic)
Marshalling\StatefulMarshallingStrategy.cs (8)
6
internal sealed class StatefulValueMarshalling(
TypePositionInfo
info, StubCodeContext stubContext, ManagedTypeInfo marshallerType, ManagedTypeInfo unmanagedType, MarshallerShape shape) : ICustomTypeMarshallingStrategy
12
public
TypePositionInfo
TypeInfo => info;
97
public static string GetMarshallerIdentifier(
TypePositionInfo
info, StubIdentifierContext context)
110
public
TypePositionInfo
TypeInfo => innerMarshaller.TypeInfo;
138
internal sealed class StatefulLinearCollectionSource(
TypePositionInfo
info, StubCodeContext codeContext) : IElementsMarshallingCollectionSource
140
public
TypePositionInfo
TypeInfo => info;
183
public
TypePositionInfo
TypeInfo => innerMarshaller.TypeInfo;
283
public
TypePositionInfo
TypeInfo => innerMarshaller.TypeInfo;
Marshalling\StatelessMarshallingStrategy.cs (9)
9
internal sealed class StatelessValueMarshalling(
TypePositionInfo
info, StubCodeContext codeContext, string marshallerType, ManagedTypeInfo unmanagedType, MarshallerShape shape) : ICustomTypeMarshallingStrategy
13
public
TypePositionInfo
TypeInfo => info;
90
public
TypePositionInfo
TypeInfo => innerMarshaller.TypeInfo;
133
public
TypePositionInfo
TypeInfo => innerMarshaller.TypeInfo;
172
internal sealed class StatelessLinearCollectionSpaceAllocator(
TypePositionInfo
info, StubCodeContext codeContext, string marshallerType, ManagedTypeInfo unmanagedType, MarshallerShape shape, CountInfo countInfo, bool countInfoRequiresCast) : ICustomTypeMarshallingStrategy
175
public
TypePositionInfo
TypeInfo => info;
269
internal sealed class StatelessLinearCollectionSource(
TypePositionInfo
info, StubCodeContext codeContext, string marshallerType) : IElementsMarshallingCollectionSource
271
public
TypePositionInfo
TypeInfo => info;
314
public
TypePositionInfo
TypeInfo => spaceMarshallingStrategy.TypeInfo;
Marshalling\StaticPinnableManagedValueMarshaller.cs (1)
8
public
TypePositionInfo
TypeInfo => innerMarshallingGenerator.TypeInfo;
Marshalling\UnmanagedToManagedOwnershipTrackingStrategy.cs (6)
14
public
TypePositionInfo
TypeInfo => innerMarshaller.TypeInfo;
50
public
TypePositionInfo
TypeInfo => innerMarshaller.TypeInfo;
97
public
TypePositionInfo
TypeInfo => inner.TypeInfo;
131
public override (string managed, string native) GetIdentifiers(
TypePositionInfo
info)
137
public override string GetAdditionalIdentifier(
TypePositionInfo
info, string name) => _innerContext.GetAdditionalIdentifier(info, name);
145
public static void DeclareOriginalValueIdentifier(IndentedTextWriter writer,
TypePositionInfo
info, StubIdentifierContext context, ManagedTypeInfo nativeType)
MarshallingAttributeInfo.cs (14)
39
public virtual IEnumerable<
TypePositionInfo
> ElementDependencies => [];
92
public sealed record CountElementCountInfo(
TypePositionInfo
ElementInfo) : CountInfo
97
public sealed record SizeAndParamIndexInfo(int ConstSize,
TypePositionInfo
? ParamAtIndex) : CountInfo
101
public const
TypePositionInfo
UnspecifiedParam = null;
116
TypePositionInfo
IidParameterIndexInfo) : NativeMarshallingAttributeInfo(EntryPointType, Marshallers)
118
public override IEnumerable<
TypePositionInfo
> ElementDependencies => [IidParameterIndexInfo];
131
public override IEnumerable<
TypePositionInfo
> ElementDependencies
137
IEnumerable<
TypePositionInfo
> GetElementDependencies()
139
if (ElementCountInfo is CountElementCountInfo { ElementInfo:
TypePositionInfo
nestedCountElement })
143
if (nestedCountElement.ManagedIndex !=
TypePositionInfo
.UnsetIndex || nestedCountElement.NativeIndex !=
TypePositionInfo
.UnsetIndex)
151
foreach (
TypePositionInfo
nestedElement in mode.Value.CollectionElementMarshallingInfo.ElementDependencies)
153
if (nestedElement.ManagedIndex !=
TypePositionInfo
.UnsetIndex || nestedElement.NativeIndex !=
TypePositionInfo
.UnsetIndex)
MarshallingInfoParser.cs (7)
19
public sealed record UseSiteAttributeData(int IndirectionDepth, CountInfo CountInfo, AttributeData AttributeData,
TypePositionInfo
? IidParameterIndexInfo = null);
118
bool TryGetInfoForElementName(AttributeData attrData, string elementName, GetMarshallingInfoCallback marshallingInfoCallback, IElementInfoProvider rootProvider, out
TypePositionInfo
info);
128
bool TryGetInfoForParamIndex(AttributeData attrData, int paramIndex, GetMarshallingInfoCallback marshallingInfoCallback, IElementInfoProvider rootProvider, out
TypePositionInfo
info);
144
public static bool TryGetInfoForElementName(this IElementInfoProvider provider, AttributeData attrData, string elementName, GetMarshallingInfoCallback marshallingInfoCallback, out
TypePositionInfo
info)
157
public static bool TryGetInfoForParamIndex(this IElementInfoProvider provider, AttributeData attrData, int paramIndex, GetMarshallingInfoCallback marshallingInfoCallback, out
TypePositionInfo
info)
300
public bool TryGetInfoForElementName(AttributeData attrData, string elementName, GetMarshallingInfoCallback marshallingInfoCallback, IElementInfoProvider rootProvider, [NotNullWhen(true)] out
TypePositionInfo
? info)
327
public bool TryGetInfoForParamIndex(AttributeData attrData, int paramIndex, GetMarshallingInfoCallback marshallingInfoCallback, IElementInfoProvider rootProvider, [NotNullWhen(true)] out
TypePositionInfo
? info)
MarshalUsingAttributeParser.cs (1)
103
if (!elementInfoProvider.TryGetInfoForElementName(attributeData, elementName, marshallingInfoCallback, out
TypePositionInfo
elementInfo))
MethodSignatureElementInfoProvider.cs (5)
30
public bool TryGetInfoForElementName(AttributeData attrData, string elementName, GetMarshallingInfoCallback marshallingInfoCallback, IElementInfoProvider rootProvider, out
TypePositionInfo
info)
38
ManagedIndex =
TypePositionInfo
.ReturnIndex
48
info =
TypePositionInfo
.CreateForParameter(
61
public bool TryGetInfoForParamIndex(AttributeData attrData, int paramIndex, GetMarshallingInfoCallback marshallingInfoCallback, IElementInfoProvider rootProvider, out
TypePositionInfo
info)
70
info =
TypePositionInfo
.CreateForParameter(
SignatureContext.cs (32)
28
public ImmutableArray<
TypePositionInfo
> ElementTypeInformation { get; init; }
30
public IEnumerable<
TypePositionInfo
> ManagedParameters => ElementTypeInformation.Where(tpi => !
TypePositionInfo
.IsSpecialIndex(tpi.ManagedIndex));
38
foreach (
TypePositionInfo
typeInfo in ElementTypeInformation)
40
if (!
TypePositionInfo
.IsSpecialIndex(typeInfo.ManagedIndex))
71
ImmutableArray<
TypePositionInfo
> typeInfos = GenerateTypeInformation(method, marshallingInfoParser, env, errorHandlingInfo);
93
private static ImmutableArray<
TypePositionInfo
> GenerateTypeInformation(
118
ImmutableArray<
TypePositionInfo
>.Builder typeInfos = ImmutableArray.CreateBuilder<
TypePositionInfo
>();
126
var
typeInfo =
TypePositionInfo
.CreateForParameter(param, marshallingInfo, env.Compilation);
138
TypePositionInfo
retTypeInfo = new(ManagedTypeInfo.CreateTypeInfoForTypeSymbol(method.ReturnType), marshallingInfoParser.ParseMarshallingInfo(method.ReturnType, returnAttributes));
141
ManagedIndex =
TypePositionInfo
.ReturnIndex,
142
NativeIndex =
TypePositionInfo
.ReturnIndex,
154
void ApplyErrorHandlingInfo(ImmutableArray<
TypePositionInfo
>.Builder infos, ErrorHandlingInfo errorInfo)
156
TypePositionInfo
CreateErrorInfo(
162
RefKind = nativeIndex ==
TypePositionInfo
.ReturnIndex ? RefKind.None : RefKind.Out,
163
ManagedIndex =
TypePositionInfo
.ErrorIndex,
169
bool MatchesManagedType(
TypePositionInfo
info) => info.ManagedType == errorInfo.ManagedType;
175
TypePositionInfo
returnInfo = infos[returnIndex];
178
infos.Add(CreateErrorInfo(
TypePositionInfo
.ReturnIndex));
182
infos[returnIndex] = returnInfo with { NativeIndex =
TypePositionInfo
.UnsetIndex };
183
infos.Add(CreateErrorInfo(
TypePositionInfo
.ReturnIndex));
189
TypePositionInfo
hiddenReturnInfo = infos[hiddenReturnIndex];
192
infos[hiddenReturnIndex] = hiddenReturnInfo with { NativeIndex =
TypePositionInfo
.UnsetIndex };
205
infos.Add(CreateErrorInfo(
TypePositionInfo
.ReturnIndex));
209
TypePositionInfo
lastParameter = GetLastManagedParameter(infos);
221
static
TypePositionInfo
GetLastManagedParameter(ImmutableArray<
TypePositionInfo
>.Builder infos)
223
TypePositionInfo
? lastParameter = null;
224
foreach (
TypePositionInfo
info in infos)
226
if (!
TypePositionInfo
.IsSpecialIndex(info.ManagedIndex)
StubCodeContext.cs (1)
59
public bool IsInStubReturnPosition(
TypePositionInfo
info)
StubIdentifierContext.cs (2)
103
public virtual (string managed, string native) GetIdentifiers(
TypePositionInfo
info)
114
public virtual string GetAdditionalIdentifier(
TypePositionInfo
info, string name)
TypePositionInfo.cs (4)
82
public bool PositionsEqual(
TypePositionInfo
other)
87
public static
TypePositionInfo
CreateForParameter(IParameterSymbol paramSymbol, MarshallingInfo marshallingInfo, Compilation compilation)
89
var
typeInfo = new TypePositionInfo(ManagedTypeInfo.CreateTypeInfoForTypeSymbol(paramSymbol.Type), marshallingInfo)
101
public static Location GetLocation(
TypePositionInfo
info, IMethodSymbol methodSymbol)
UnmanagedToManagedStubGenerator.cs (1)
17
ImmutableArray<
TypePositionInfo
> argTypes,
VariableDeclarations.cs (4)
16
TypePositionInfo
info = marshaller.TypeInfo;
39
TypePositionInfo
errorInfo = errorMarshaller.TypeInfo;
40
if (errorInfo is { IsErrorHandlingPosition: true, ManagedIndex:
TypePositionInfo
.ErrorIndex }
67
TypePositionInfo
info = marshaller.TypeInfo;