Compiler\BodySubstitutionParser.cs (9)
22private readonly Dictionary<MethodDesc, BodySubstitution> _methodSubstitutions;
29_methodSubstitutions = new Dictionary<MethodDesc, BodySubstitution>();
36_methodSubstitutions = new Dictionary<MethodDesc, BodySubstitution>();
61MethodDesc method = FindMethod(type, signature);
157private static MethodDesc FindMethod(TypeDesc type, string signature)
159foreach (MethodDesc meth in type.GetMethods())
228private Dictionary<MethodDesc, BodySubstitution> _bodySubstitutions;
231public IReadOnlyDictionary<MethodDesc, BodySubstitution> BodySubstitutions => _bodySubstitutions;
234public BodyAndFieldSubstitutions(Dictionary<MethodDesc, BodySubstitution> bodySubstitutions, Dictionary<FieldDesc, object> fieldSubstitutions)
Compiler\Compilation.cs (40)
79public virtual MethodIL GetMethodIL(MethodDesc method)
92public void DetectGenericCycles(MethodDesc caller, MethodDesc callee)
102public bool CanInline(MethodDesc caller, MethodDesc callee)
117public DelegateCreationInfo GetDelegateCtor(TypeDesc delegateType, MethodDesc target, TypeDesc constrainedType, bool followVirtualDispatch)
127MethodDesc originalTarget = target;
128MethodDesc targetDefinition = target.GetMethodDefinition();
174public MethodDesc ExpandIntrinsicForCallsite(MethodDesc intrinsicMethod, MethodDesc callsiteMethod)
240public bool IsEffectivelySealed(MethodDesc method)
245public MethodDesc ResolveVirtualMethod(MethodDesc declMethod, TypeDesc implType, out CORINFO_DEVIRTUALIZATION_DETAIL devirtualizationDetail)
266return ((MethodDesc)targetOfLookup).IsRuntimeDeterminedExactMethod;
302public static MethodDesc GetConstructorForCreateInstanceIntrinsic(TypeDesc type)
304MethodDesc ctor = type.GetDefaultConstructor();
355return NodeFactory.MethodGenericDictionary((MethodDesc)targetOfLookup);
357return NodeFactory.FatFunctionPointer((MethodDesc)targetOfLookup);
359return NodeFactory.RuntimeMethodHandle((MethodDesc)targetOfLookup);
365MethodDesc ctor = GetConstructorForCreateInstanceIntrinsic(type);
379public GenericDictionaryLookup ComputeGenericLookup(MethodDesc contextMethod, ReadyToRunHelperId lookupKind, object targetOfLookup)
457public bool IsFatPointerCandidate(MethodDesc containingMethod, MethodSignature signature)
480public MethodDesc GetTargetOfGenericVirtualMethodCall(MethodDesc calledMethod)
488MethodDesc targetMethod = calledMethod.GetCanonMethodTarget(CanonicalFormKind.Specific);
489MethodDesc targetMethodDefinition = targetMethod.GetMethodDefinition();
491MethodDesc slotNormalizedMethodDefinition = MetadataVirtualMethodAlgorithm.FindSlotDefiningMethodForVirtualMethod(targetMethodDefinition);
508MethodDesc runtimeDeterminedSlotNormalizedMethod;
560private sealed class ILCache : LockFreeReaderHashtable<MethodDesc, ILCache.MethodILData>
569protected override int GetKeyHashCode(MethodDesc key)
577protected override bool CompareKeyToValue(MethodDesc key, MethodILData value)
585protected override MethodILData CreateValueFromKey(MethodDesc key)
592public MethodDesc Method;
608public override MethodIL GetMethodIL(MethodDesc method)
653public IEnumerable<MethodDesc> CompiledMethodBodies
665public bool IsMethodBodyCompiled(MethodDesc method)
694public IEnumerable<MethodDesc> ReflectedMethods
710public readonly MethodDesc Method;
711public ConstrainedCallInfo(TypeDesc constrainedType, MethodDesc method)
Compiler\CompilerTypeSystemContext.InterfaceThunks.cs (14)
70public MethodDesc GetDefaultInterfaceMethodImplementationThunk(MethodDesc targetMethod, TypeDesc implementingClass, DefType interfaceOnDefinition, out int interfaceIndex)
98MethodDesc thunk = _dimThunkHashtable.GetOrCreateValue(methodKey);
105public readonly MethodDesc TargetMethod;
109public DefaultInterfaceMethodImplementationInstantiationThunkHashtableKey(MethodDesc targetMethod, int interfaceIndex, bool useContextFromRuntime)
150public bool IsDefaultInterfaceMethodImplementationInstantiationThunk(MethodDesc method)
158public MethodDesc GetTargetOfDefaultInterfaceMethodImplementationInstantiationThunk(MethodDesc method)
168private readonly MethodDesc _targetMethod;
174public DefaultInterfaceMethodImplementationInstantiationThunk(TypeDesc owningType, MethodDesc targetMethod, int interfaceIndex, bool useContextFromRuntime)
198public MethodDesc TargetMethod => _targetMethod;
216public MethodDesc BaseMethod => _targetMethod;
229MethodDesc getOrdinalInterfaceMethod = Context.GetHelperEntryPoint("SharedCodeHelpers"u8, "GetOrdinalInterface"u8);
230MethodDesc getCurrentContext = Context.GetHelperEntryPoint("SharedCodeHelpers"u8, "GetCurrentSharedThunkContext"u8);
Compiler\Dataflow\CompilerGeneratedState.cs (40)
26MethodDesc CreatingMethod,
89private Dictionary<MetadataType, MethodDesc>? _compilerGeneratedTypeToUserCodeMethod;
91private Dictionary<MethodDesc, MethodDesc>? _compilerGeneratedMethodToUserCodeMethod;
96private Dictionary<MethodDesc, List<TypeSystemEntity>>? _compilerGeneratedMembers;
125var userDefinedMethods = new HashSet<MethodDesc>();
137void ProcessMethod(MethodDesc method)
175MethodDesc? referencedMethod = methodBody.GetObject(reader.ReadILToken(), NotFoundBehavior.ReturnNull) as MethodDesc;
193var alreadyAssociatedMethod = generatedTypeToTypeArgs[generatedType].CreatingMethod;
258_compilerGeneratedTypeToUserCodeMethod ??= new Dictionary<MetadataType, MethodDesc>();
261var alreadyAssociatedMethod = _compilerGeneratedTypeToUserCodeMethod[stateMachineType];
287foreach (MethodDesc method in type.GetMethods())
299foreach (var method in nestedType.GetMethods())
314foreach (var userDefinedMethod in userDefinedMethods)
320_compilerGeneratedMembers ??= new Dictionary<MethodDesc, List<TypeSystemEntity>>();
327case MethodDesc nestedFunction:
330_compilerGeneratedMethodToUserCodeMethod ??= new Dictionary<MethodDesc, MethodDesc>();
333var alreadyAssociatedMethod = _compilerGeneratedMethodToUserCodeMethod[nestedFunction];
364var method = info.CreatingMethod;
365var alreadyAssociatedMethod = _generatedTypeToTypeArgumentInfo[generatedType].CreatingMethod;
403var method = typeInfo.CreatingMethod;
468MethodDesc? methodOperand = null;
473methodOperand = body.GetObject(reader.ReadILToken()) as MethodDesc;
474if (methodOperand is MethodDesc { OwningType: MetadataType owningType }
487methodOperand = body.GetObject(reader.ReadILToken()) as MethodDesc;
528public bool TryGetCompilerGeneratedCalleesForUserMethod(MethodDesc method, [NotNullWhen(true)] out List<TypeSystemEntity>? callees)
549public bool TryGetOwningMethodForCompilerGeneratedMethod(MethodDesc compilerGeneratedMethod, [NotNullWhen(true)] out MethodDesc? owningMethod)
560public bool TryGetOwningMethodForCompilerGeneratedType(MetadataType compilerGeneratedType, [NotNullWhen(true)] out MethodDesc? owningMethod)
604if (member is MethodDesc method && CompilerGeneratedNames.IsLambdaOrLocalFunction(method.Name.AsSpan()))
613public static bool TryGetStateMachineType(MethodDesc method, [NotNullWhen(true)] out MetadataType? stateMachineType)
660public bool TryGetCompilerGeneratedCalleesForUserMethod(MethodDesc method, [NotNullWhen(true)] out List<TypeSystemEntity>? callees)
707public bool TryGetOwningMethodForCompilerGeneratedMember(TypeSystemEntity sourceMember, [NotNullWhen(true)] out MethodDesc? owningMethod)
727MethodDesc? compilerGeneratedMethod = sourceMember as MethodDesc;
740public bool TryGetUserMethodForCompilerGeneratedMember(TypeSystemEntity sourceMember, [NotNullWhen(true)] out MethodDesc? userMethod)
746Debug.Assert(sourceMember is not MethodDesc sourceMethod || sourceMethod.IsTypicalMethodDefinition);
753MethodDesc? userMethodCandidate;
Compiler\Dataflow\FlowAnnotations.cs (21)
52public bool RequiresDataflowAnalysisDueToSignature(MethodDesc method)
68public bool RequiresVirtualMethodDataflowAnalysis(MethodDesc method)
110public bool HasGenericParameterAnnotation(MethodDesc method)
125MethodDesc method = param.Method.Method.GetTypicalMethodDefinition();
135public DynamicallyAccessedMemberTypes GetReturnParameterAnnotation(MethodDesc method)
167MethodDesc method => ShouldWarnWhenAccessedForReflection(method),
190MethodDesc parent = ecmaGenericParameter.Module.GetMethod(paramDef.Parent);
201public bool ShouldWarnWhenAccessedForReflection(MethodDesc method)
528MethodDesc setMethod = property.SetMethod;
573MethodDesc getMethod = property.GetMethod;
727internal void ValidateMethodAnnotationsAreSame(MethodDesc method, MethodDesc baseMethod, TypeSystemEntity origin)
785private void ValidateMethodParametersHaveNoAnnotations(DynamicallyAccessedMemberTypes[] parameterAnnotations, MethodDesc method, MethodDesc baseMethod, TypeSystemEntity origin)
798private void ValidateMethodGenericParametersHaveNoAnnotations(DynamicallyAccessedMemberTypes[] genericParameterAnnotations, MethodDesc method, MethodDesc baseMethod, TypeSystemEntity origin)
831case (TypeDesc, MethodDesc method):
833DiagnosticUtilities.GetMethodSignatureDisplayName(method), DiagnosticUtilities.GetMethodSignatureDisplayName((MethodDesc)baseProvider));
860public bool TryGetAnnotation(MethodDesc method, out MethodAnnotations annotations)
926public readonly MethodDesc Method;
932MethodDesc method,
Compiler\Dataflow\MethodBodyScanner.cs (15)
288MethodDesc startingMethod = startingMethodBody.OwningMethod;
334private static void TrackNestedFunctionReference(MethodDesc referencedMethod, ref InterproceduralState interproceduralState)
336MethodDesc method = referencedMethod.GetTypicalMethodDefinition();
346MethodDesc thisMethod = methodIL.OwningMethod;
475if (methodIL.GetObject(reader.ReadILToken()) is MethodDesc methodOperand)
536if (methodIL.GetObject(reader.ReadILToken()) is MethodDesc methodOperand)
763MethodDesc methodOperand = (MethodDesc)methodIL.GetObject(reader.ReadILToken());
884private void ScanLdarg(ILOpcode opcode, int parameterIndex, Stack<StackSlot> currentStack, MethodDesc thisMethod)
979else if (operand is MethodDesc method)
1167MethodDesc methodCalled,
1241MethodDesc calledMethod,
1265protected abstract void HandleMethodTokenAccess(MethodIL methodIL, int offset, MethodDesc accessedMethod);
1276MethodDesc calledMethod,
1327MethodDesc calledMethod,
Compiler\Dataflow\ReflectionMarker.cs (11)
35public List<(MethodDesc OwningMethod, INodeWithRuntimeDeterminedDependencies Dependency)> RuntimeDeterminedDependencies { get; } = new List<(MethodDesc, INodeWithRuntimeDeterminedDependencies)>();
78case MethodDesc method:
181internal void MarkMethod(in MessageOrigin origin, MethodDesc method, TypeSystemEntity reason, AccessKind accessKind = AccessKind.Unspecified)
189internal void MarkMethod(in MessageOrigin origin, MethodDesc method, string reason, AccessKind accessKind = AccessKind.Unspecified)
239internal void MarkConstructorsOnType(in MessageOrigin origin, TypeDesc type, Func<MethodDesc, bool>? filter, TypeSystemEntity reason, BindingFlags? bindingFlags = null)
245foreach (var ctor in type.GetConstructorsOnType(filter, bindingFlags))
284MethodDesc cctor = type.GetStaticConstructor();
306Debug.Assert(entity is MethodDesc or FieldDesc);
334if (entity is MethodDesc)
358Debug.Assert(entity is MethodDesc or FieldDesc);
Compiler\Dataflow\ReflectionMethodBodyScanner.cs (9)
37public static bool RequiresReflectionMethodBodyScannerForCallSite(FlowAnnotations flowAnnotations, MethodDesc method)
48public static bool RequiresReflectionMethodBodyScannerForMethodBody(FlowAnnotations flowAnnotations, MethodDesc methodDefinition)
127public static DependencyList ScanAndProcessReturnValue(NodeFactory factory, FlowAnnotations annotations, Logger logger, MethodIL methodIL, out List<(MethodDesc OwningMethod, INodeWithRuntimeDeterminedDependencies Dependency)> runtimeDependencies)
271protected override void HandleMethodTokenAccess(MethodIL methodIL, int offset, MethodDesc accessedMethod)
289public override MultiValue HandleCall(MethodIL callingMethodIL, MethodDesc calledMethod, ILOpcode operation, int offset, ValueNodeList methodParams)
333MethodDesc calledMethod,
340var callingMethodDefinition = callingMethodBody.OwningMethod;
442private void ProcessGenericArgumentDataFlow(MethodDesc method)
477internal static bool IsPInvokeDangerous(MethodDesc calledMethod, out bool comDangerousMethod, out bool aotUnsafeDelegate)
Compiler\DependencyAnalysis\NativeLayoutVertexNode.cs (33)
102protected readonly MethodDesc _method;
107public MethodDesc Method => _method;
113public NativeLayoutMethodEntryVertexNode(NodeFactory factory, MethodDesc method, MethodEntryFlags flags)
194MethodDesc methodForToken = GetMethodForMetadata(_method, out bool isAsyncVariant, out bool isReturnDroppingAsyncThunk);
213private static MethodDesc GetMethodForMetadata(MethodDesc method, out bool isAsyncVariant, out bool isReturnDroppingAsyncThunk)
215MethodDesc result = method.GetTypicalMethodDefinition();
642private static bool NeedsEntrypoint(MethodDesc method)
659public NativeLayoutTemplateMethodSignatureVertexNode(NodeFactory factory, MethodDesc method)
707if (owningMethodOrType is MethodDesc owningMethod)
725if (_owningMethodOrType is MethodDesc owningMethod)
802private MethodDesc _method;
806public NativeLayoutTemplateMethodLayoutVertexNode(NodeFactory factory, MethodDesc method)
1044MethodDesc cctorMethod = _type.GetStaticConstructor();
1045MethodDesc canonCctorMethod = cctorMethod.GetCanonMethodTarget(CanonicalFormKind.Specific);
1240private MethodDesc _method;
1242public NativeLayoutInterfaceDispatchGenericDictionarySlotNode(NodeFactory factory, MethodDesc method)
1255MethodDesc method = _method;
1272MethodDesc method = _method;
1284private MethodDesc _method;
1286public NativeLayoutGvmDispatchGenericDictionarySlotNode(NodeFactory factory, MethodDesc method)
1311MethodDesc canonMethod = _method.GetCanonMethodTarget(CanonicalFormKind.Specific);
1327private MethodDesc _method;
1329public NativeLayoutMethodDictionaryGenericDictionarySlotNode(NodeFactory factory, MethodDesc method)
1410private MethodDesc _method;
1412public NativeLayoutMethodLdTokenGenericDictionarySlotNode(NodeFactory factory, MethodDesc method)
1456private MethodDesc _constrainedMethod;
1460public NativeLayoutConstrainedMethodDictionarySlotNode(MethodDesc constrainedMethod, TypeDesc constraintType, bool directCall)
1521MethodDesc canonMethod = _constrainedMethod.GetCanonMethodTarget(CanonicalFormKind.Specific);
1539var canonConstrainedMethod = _constrainedMethod.GetCanonMethodTarget(CanonicalFormKind.Specific);
1549private MethodDesc _method;
1559public WrappedMethodEntryVertexNode(NodeFactory factory, MethodDesc method, bool unboxingStub, IMethodNode functionPointerNode) :
1575public NativeLayoutMethodEntrypointGenericDictionarySlotNode(NodeFactory factory, MethodDesc method, IMethodNode functionPointerNode, bool unboxingStub)
Compiler\DependencyAnalysis\NodeFactory.cs (102)
131protected virtual bool CanFold(MethodDesc method) => false;
299_tentativeMethodEntrypoints = new NodeCache<MethodDesc, IMethodNode>((MethodDesc method) =>
311_unboxingStubs = new NodeCache<MethodDesc, IMethodNode>(CreateUnboxingStubNode);
328_gvmDependenciesNode = new NodeCache<MethodDesc, GVMDependenciesNode>(method =>
333_gvmImpls = new NodeCache<MethodDesc, GenericVirtualMethodImplNode>(method =>
338_genericMethodEntries = new NodeCache<MethodDesc, GenericMethodsHashtableEntryNode>(method =>
343_exactMethodEntries = new NodeCache<MethodDesc, ExactMethodInstantiationsEntryNode>(method =>
353_addressTakenMethods = new NodeCache<MethodDesc, AddressTakenMethodNode>(method =>
358_reflectedDelegateTargetMethods = new NodeCache<MethodDesc, DelegateTargetVirtualMethodNode>(method =>
363_delegateTargetMethods = new NodeCache<MethodDesc, DelegateTargetVirtualMethodNode>(method =>
368_reflectableVirtualMethodImpls = new NodeCache<(MethodDesc Declaration, MethodDesc Implementation), ReflectableVirtualMethodImplNode>(methods =>
378_reflectedMethods = new NodeCache<MethodDesc, ReflectedMethodNode>(method =>
420_variantMethods = new NodeCache<MethodDesc, VariantInterfaceMethodUseNode>((MethodDesc method) =>
474_runtimeMethodHandles = new NodeCache<MethodDesc, RuntimeMethodHandleNode>((MethodDesc method) =>
519_eagerCctorIndirectionNodes = new NodeCache<MethodDesc, EmbeddedObjectNode>((MethodDesc method) =>
538_methodGenericDictionaries = new NodeCache<MethodDesc, ISortableSymbolNode>(method =>
562_methodsWithMetadata = new NodeCache<MethodDesc, MethodMetadataNode>(method =>
567_methodsWithLimitedMetadata = new NodeCache<MethodDesc, MethodMetadataNode>(method =>
609_stringAllocators = new NodeCache<MethodDesc, IMethodNode>(constructor =>
711protected abstract IMethodNode CreateMethodEntrypointNode(MethodDesc method);
713protected abstract IMethodNode CreateUnboxingStubNode(MethodDesc method);
893public DispatchCellNode DispatchCell(MethodDesc method, ISortableSymbolNode callSite = null)
898private NodeCache<MethodDesc, RuntimeMethodHandleNode> _runtimeMethodHandles;
900public RuntimeMethodHandleNode RuntimeMethodHandle(MethodDesc method)
1062private NodeCache<MethodDesc, ISortableSymbolNode> _methodGenericDictionaries;
1063public ISortableSymbolNode MethodGenericDictionary(MethodDesc method)
1080private NodeCache<MethodDesc, IMethodNode> _stringAllocators;
1081public IMethodNode StringAllocator(MethodDesc stringConstructor)
1097private sealed class MethodEntrypointHashtable : LockFreeReaderHashtable<MethodDesc, IMethodNode>
1101protected override bool CompareKeyToValue(MethodDesc key, IMethodNode value) => key == value.Method;
1103protected override IMethodNode CreateValueFromKey(MethodDesc key) => _factory.CreateMethodEntrypointNode(key);
1104protected override int GetKeyHashCode(MethodDesc key) => key.GetHashCode();
1109private NodeCache<MethodDesc, IMethodNode> _unboxingStubs;
1112public IMethodNode MethodEntrypoint(MethodDesc method, bool unboxingStub = false)
1122protected NodeCache<MethodDesc, IMethodNode> _tentativeMethodEntrypoints;
1124public IMethodNode TentativeMethodEntrypoint(MethodDesc method, bool unboxingStub = false)
1132public IMethodNode MethodEntrypointOrTentativeMethod(MethodDesc method, bool unboxingStub = false)
1151public IMethodNode FatFunctionPointer(MethodDesc method, bool isUnboxingStub = false)
1158public IMethodNode FatAddressTakenFunctionPointer(MethodDesc method, bool isUnboxingStub = false)
1166public IMethodNode ExactCallableAddress(MethodDesc method, bool isUnboxingStub = false)
1168MethodDesc canonMethod = method.GetCanonMethodTarget(CanonicalFormKind.Specific);
1175public IMethodNode ExactCallableAddressTakenAddress(MethodDesc method, bool isUnboxingStub = false)
1177MethodDesc canonMethod = method.GetCanonMethodTarget(CanonicalFormKind.Specific);
1184public IMethodNode CanonicalEntrypoint(MethodDesc method)
1186MethodDesc canonMethod = method.GetCanonMethodTarget(CanonicalFormKind.Specific);
1193private NodeCache<MethodDesc, GVMDependenciesNode> _gvmDependenciesNode;
1194public GVMDependenciesNode GVMDependencies(MethodDesc method)
1199private NodeCache<MethodDesc, GenericVirtualMethodImplNode> _gvmImpls;
1200public GenericVirtualMethodImplNode GenericVirtualMethodImpl(MethodDesc method)
1205private NodeCache<MethodDesc, GenericMethodsHashtableEntryNode> _genericMethodEntries;
1206public GenericMethodsHashtableEntryNode GenericMethodsHashtableEntry(MethodDesc method)
1211private NodeCache<MethodDesc, ExactMethodInstantiationsEntryNode> _exactMethodEntries;
1212public ExactMethodInstantiationsEntryNode ExactMethodInstantiationsHashtableEntry(MethodDesc method)
1223private NodeCache<MethodDesc, AddressTakenMethodNode> _addressTakenMethods;
1224public IMethodNode AddressTakenMethodEntrypoint(MethodDesc method, bool unboxingStub = false)
1232private NodeCache<MethodDesc, DelegateTargetVirtualMethodNode> _reflectedDelegateTargetMethods;
1233public DelegateTargetVirtualMethodNode ReflectedDelegateTargetVirtualMethod(MethodDesc method)
1238private NodeCache<MethodDesc, DelegateTargetVirtualMethodNode> _delegateTargetMethods;
1239public DelegateTargetVirtualMethodNode DelegateTargetVirtualMethod(MethodDesc method)
1244private NodeCache<(MethodDesc Declaration, MethodDesc Implementation), ReflectableVirtualMethodImplNode> _reflectableVirtualMethodImpls;
1245public ReflectableVirtualMethodImplNode ReflectableVirtualMethodImpl(MethodDesc declaration, MethodDesc implementation)
1260private NodeCache<MethodDesc, ReflectedMethodNode> _reflectedMethods;
1261public ReflectedMethodNode ReflectedMethod(MethodDesc method)
1302private sealed class ShadowConcreteMethodHashtable : LockFreeReaderHashtable<MethodDesc, ShadowConcreteMethodNode>
1306protected override bool CompareKeyToValue(MethodDesc key, ShadowConcreteMethodNode value) => key == value.Method;
1308protected override ShadowConcreteMethodNode CreateValueFromKey(MethodDesc key) =>
1310protected override int GetKeyHashCode(MethodDesc key) => key.GetHashCode();
1315public ShadowConcreteMethodNode ShadowConcreteMethod(MethodDesc method)
1320private sealed class ShadowNonConcreteMethodHashtable : LockFreeReaderHashtable<MethodDesc, ShadowNonConcreteMethodNode>
1324protected override bool CompareKeyToValue(MethodDesc key, ShadowNonConcreteMethodNode value) => key == value.Method;
1326protected override ShadowNonConcreteMethodNode CreateValueFromKey(MethodDesc key) =>
1328protected override int GetKeyHashCode(MethodDesc key) => key.GetHashCode();
1333public ShadowNonConcreteMethodNode ShadowNonConcreteMethod(MethodDesc method)
1360var method = type.GetKnownMethod(Encoding.UTF8.GetBytes(entry[2]), null);
1378private MethodDesc _instanceMethodRemovedHelper;
1379public MethodDesc InstanceMethodRemovedHelper
1389private sealed class VirtualMethodUseHashtable : LockFreeReaderHashtable<MethodDesc, VirtualMethodUseNode>
1393protected override bool CompareKeyToValue(MethodDesc key, VirtualMethodUseNode value) => key == value.Method;
1395protected override VirtualMethodUseNode CreateValueFromKey(MethodDesc key)
1402protected override int GetKeyHashCode(MethodDesc key) => key.GetHashCode();
1408public DependencyNodeCore<NodeFactory> VirtualMethodUse(MethodDesc decl)
1413private NodeCache<MethodDesc, VariantInterfaceMethodUseNode> _variantMethods;
1415public DependencyNodeCore<NodeFactory> VariantInterfaceMethodUse(MethodDesc decl)
1458private NodeCache<MethodDesc, MethodMetadataNode> _methodsWithMetadata;
1460internal MethodMetadataNode MethodMetadata(MethodDesc method)
1468private NodeCache<MethodDesc, MethodMetadataNode> _methodsWithLimitedMetadata;
1470internal MethodMetadataNode LimitedMethodMetadata(MethodDesc method)
1572private NodeCache<MethodDesc, EmbeddedObjectNode> _eagerCctorIndirectionNodes;
1574public EmbeddedObjectNode EagerCctorIndirection(MethodDesc cctorMethod)
1628public WasmTypeNode WasmTypeNode(MethodDesc desc)
1716public Vertex EncodeReferenceToMethod(NativeWriter writer, MethodDesc method)
1724public readonly MethodDesc Method;
1727public MethodKey(MethodDesc method, bool isUnboxingStub)
1786public readonly MethodDesc Target;
1789public DispatchCellKey(MethodDesc target, ISortableSymbolNode callsiteId)
Compiler\DependencyAnalysis\NodeFactory.GenericLookups.cs (13)
45_methodHandles = new NodeCache<MethodDesc, GenericLookupResult>(method =>
55_methodDictionaries = new NodeCache<MethodDesc, GenericLookupResult>(method =>
65_dispatchCells = new NodeCache<MethodDesc, GenericLookupResult>(method =>
140private NodeCache<MethodDesc, GenericLookupResult> _methodHandles;
142public GenericLookupResult MethodHandle(MethodDesc method)
175private NodeCache<MethodDesc, GenericLookupResult> _methodDictionaries;
177public GenericLookupResult MethodDictionary(MethodDesc method)
182private NodeCache<MethodDesc, GenericLookupResult> _dispatchCells;
184public GenericLookupResult DispatchCell(MethodDesc method)
191public GenericLookupResult MethodEntry(MethodDesc method, bool isUnboxingThunk = false)
211public GenericLookupResult ConstrainedMethodUse(MethodDesc constrainedMethod, TypeDesc constraintType, bool directCall)
221public ConstrainedMethodUseKey(MethodDesc constrainedMethod, TypeDesc constraintType, bool directCall)
228public readonly MethodDesc ConstrainedMethod;
Compiler\DependencyAnalysis\NodeFactory.NativeLayout.cs (25)
55_methodEntries = new NodeCache<MethodDesc, NativeLayoutMethodEntryVertexNode>(method =>
60_templateMethodEntries = new NodeCache<MethodDesc, NativeLayoutTemplateMethodSignatureVertexNode>(method =>
65_templateMethodLayouts = new NodeCache<MethodDesc, NativeLayoutTemplateMethodLayoutVertexNode>(method =>
110_interfaceCell_GenericDictionarySlots = new NodeCache<MethodDesc, NativeLayoutInterfaceDispatchGenericDictionarySlotNode>(method =>
115_gvmCell_GenericDictionarySlots = new NodeCache<MethodDesc, NativeLayoutGvmDispatchGenericDictionarySlotNode>(method =>
120_methodDictionary_GenericDictionarySlots = new NodeCache<MethodDesc, NativeLayoutMethodDictionaryGenericDictionarySlotNode>(method =>
135_methodLdToken_GenericDictionarySlots = new NodeCache<MethodDesc, NativeLayoutMethodLdTokenGenericDictionarySlotNode>(method =>
315private NodeCache<MethodDesc, NativeLayoutMethodEntryVertexNode> _methodEntries;
316internal NativeLayoutMethodEntryVertexNode MethodEntry(MethodDesc method)
321private NodeCache<MethodDesc, NativeLayoutTemplateMethodSignatureVertexNode> _templateMethodEntries;
322internal NativeLayoutTemplateMethodSignatureVertexNode TemplateMethodEntry(MethodDesc method)
327private NodeCache<MethodDesc, NativeLayoutTemplateMethodLayoutVertexNode> _templateMethodLayouts;
328public NativeLayoutTemplateMethodLayoutVertexNode TemplateMethodLayout(MethodDesc method)
381private NodeCache<MethodDesc, NativeLayoutInterfaceDispatchGenericDictionarySlotNode> _interfaceCell_GenericDictionarySlots;
382public NativeLayoutInterfaceDispatchGenericDictionarySlotNode InterfaceCellDictionarySlot(MethodDesc method)
387private NodeCache<MethodDesc, NativeLayoutGvmDispatchGenericDictionarySlotNode> _gvmCell_GenericDictionarySlots;
388public NativeLayoutGvmDispatchGenericDictionarySlotNode GvmCellDictionarySlot(MethodDesc method)
393private NodeCache<MethodDesc, NativeLayoutMethodDictionaryGenericDictionarySlotNode> _methodDictionary_GenericDictionarySlots;
394public NativeLayoutMethodDictionaryGenericDictionarySlotNode MethodDictionaryDictionarySlot(MethodDesc method)
404public readonly MethodDesc Method;
407public MethodEntrypointSlotKey(MethodDesc method, bool unboxing, IMethodNode functionPointerTarget)
447public NativeLayoutMethodEntrypointGenericDictionarySlotNode MethodEntrypointDictionarySlot(MethodDesc method, bool unboxing, IMethodNode functionPointerTarget)
458private NodeCache<MethodDesc, NativeLayoutMethodLdTokenGenericDictionarySlotNode> _methodLdToken_GenericDictionarySlots;
459public NativeLayoutMethodLdTokenGenericDictionarySlotNode MethodLdTokenDictionarySlot(MethodDesc method)
471public NativeLayoutConstrainedMethodDictionarySlotNode ConstrainedMethodUse(MethodDesc constrainedMethod, TypeDesc constraintType, bool directCall)
Compiler\ILScanner.cs (33)
58var canonicalMethodsToCompile = new HashSet<MethodDesc>();
72MethodDesc method = methodCodeNodeNeedingCode.Method;
120MethodDesc method = methodCodeNodeNeedingCode.Method;
197MethodDesc methodDesc;
296private readonly Dictionary<TypeDesc, MethodDesc[]> _vtableSlices = new Dictionary<TypeDesc, MethodDesc[]>();
305ArrayBuilder<MethodDesc> usedSlots = default;
309MethodDesc slot = vtableSliceNode.Slots[i];
321if (!_vtableSlices.TryGetValue(type, out MethodDesc[] slots))
391MethodDesc targetMethod = methodDictLookup.Method.GetCanonMethodTarget(CanonicalFormKind.Specific);
446Debug.Assert(methodOrType is MethodDesc);
447MethodDesc method = (MethodDesc)methodOrType;
464private HashSet<MethodDesc> _overriddenMethods = new();
465private HashSet<MethodDesc> _generatedVirtualMethods = new();
480var vtables = new Dictionary<TypeDesc, List<MethodDesc>>();
601static List<MethodDesc> BuildVTable(NodeFactory factory, TypeDesc currentType, TypeDesc implType, List<MethodDesc> vtable)
608IReadOnlyList<MethodDesc> slice = factory.VTable(currentType).Slots;
609foreach (MethodDesc decl in slice)
621if (!vtables.TryGetValue(baseType, out List<MethodDesc> baseVtable))
622vtables.Add(baseType, baseVtable = BuildVTable(factory, baseType, baseType, new List<MethodDesc>()));
624if (!vtables.TryGetValue(type, out List<MethodDesc> vtable))
625vtables.Add(type, vtable = BuildVTable(factory, type, type, new List<MethodDesc>()));
714public override bool IsEffectivelySealed(MethodDesc method)
729MethodDesc canonMethod = method.GetCanonMethodTarget(CanonicalFormKind.Specific);
737protected override MethodDesc ResolveVirtualMethod(MethodDesc declMethod, DefType implType, out CORINFO_DEVIRTUALIZATION_DETAIL devirtualizationDetail)
836public bool CanInline(MethodDesc caller, MethodDesc callee)
857private readonly Dictionary<MethodDesc, TypeSystemException> _importationErrors = new Dictionary<MethodDesc, TypeSystemException>();
871public override TypeSystemException GetCompilationError(MethodDesc method)
Compiler\MetadataManager.cs (68)
53private List<MetadataMapping<MethodDesc>> _methodMappings;
54private Dictionary<MethodDesc, int> _methodHandleMap;
72private readonly SortedSet<MethodDesc> _methodsGenerated = new SortedSet<MethodDesc>(TypeSystemComparer.Instance);
73private readonly SortedSet<MethodDesc> _reflectableMethods = new SortedSet<MethodDesc>(TypeSystemComparer.Instance);
84private readonly SortedSet<MethodDesc> _genericMethodHashtableEntries = new SortedSet<MethodDesc>(TypeSystemComparer.Instance);
85private readonly SortedSet<MethodDesc> _exactMethodHashtableEntries = new SortedSet<MethodDesc>(TypeSystemComparer.Instance);
396public virtual bool IsReflectionInvokable(MethodDesc method)
401public static bool IsMethodSupportedInReflectionInvoke(MethodDesc method)
446public bool HasReflectionInvokeStub(MethodDesc method)
457public bool ShouldMethodBeInInvokeMap(MethodDesc method)
470public void GetDependenciesDueToGenericDictionary(ref DependencyList dependencies, NodeFactory factory, MethodDesc method)
479public IEnumerable<CombinedDependencyListEntry> GetConditionalDependenciesDueToGenericDictionary(NodeFactory factory, MethodDesc method)
492public void GetDependenciesDueToReflectability(ref DependencyList dependencies, NodeFactory factory, MethodDesc method)
545public virtual void GetDependenciesDueToVirtualMethodReflectability(ref DependencyList dependencies, NodeFactory factory, MethodDesc method)
549protected virtual void GetMetadataDependenciesDueToReflectability(ref DependencyList dependencies, NodeFactory factory, MethodDesc method)
556public virtual void GetNativeLayoutMetadataDependencies(ref DependencyList dependencies, NodeFactory factory, MethodDesc method)
607public virtual void GetDependenciesDueToLdToken(ref DependencyList dependencies, NodeFactory factory, MethodDesc method)
622public void GetDependenciesDueToDelegateCreation(ref DependencyList dependencies, NodeFactory factory, TypeDesc delegateType, MethodDesc target)
634public virtual void GetDependenciesDueToDelegateCreation(ref CombinedDependencyList dependencies, NodeFactory factory, TypeDesc delegateType, MethodDesc target)
643public virtual void GetDependenciesForOverridingMethod(ref CombinedDependencyList dependencies, NodeFactory factory, MethodDesc decl, MethodDesc impl)
656public void GetDependenciesDueToMethodCodePresence(ref DependencyList dependencies, NodeFactory factory, MethodDesc method, MethodIL methodIL)
663public virtual void GetConditionalDependenciesDueToMethodCodePresence(ref CombinedDependencyList dependencies, NodeFactory factory, MethodDesc method)
669protected virtual void GetDependenciesDueToMethodCodePresenceInternal(ref DependencyList dependencies, NodeFactory factory, MethodDesc method, MethodIL methodIL)
678public bool HasReflectionInvokeStubForInvokableMethod(MethodDesc method)
688public bool WillUseMetadataTokenToReferenceMethod(MethodDesc method)
705public MethodDesc GetReflectionInvokeStub(MethodDesc method)
728out List<MetadataMapping<MethodDesc>> methodMappings,
729out Dictionary<MethodDesc, int> methodMetadataMappings,
740out List<MetadataMapping<MethodDesc>> methodMappings,
741out Dictionary<MethodDesc, int> methodMetadataMappings,
754var methodsWithMappings = new HashSet<MethodDesc>();
755foreach (var method in GetReflectableMethods())
765var methodBodies = new HashSet<MethodDesc>();
768MethodDesc method = methodBody.Method;
828methodMappings = new List<MetadataMapping<MethodDesc>>();
829methodMetadataMappings = new Dictionary<MethodDesc, int>();
855foreach (var method in GetReflectableMethods())
857MethodDesc typicalMethod = method.GetTypicalMethodDefinition();
888methodMappings.Add(new MetadataMapping<MethodDesc>(method, writer.GetRecordHandle(record)));
938protected StackTraceRecordData CreateStackTraceRecord(Metadata.MetadataTransform transform, MethodDesc method, StackTraceRecordFlags flags)
941MethodDesc methodToGenerateMetadataFor = method.GetTypicalMethodDefinition();
1007public IEnumerable<MetadataMapping<MethodDesc>> GetMethodMapping(NodeFactory factory)
1013public int GetMetadataHandleForMethod(NodeFactory factory, MethodDesc method)
1103public IEnumerable<MethodDesc> GetCompiledMethods()
1108public IEnumerable<MethodDesc> GetReflectableMethods()
1128public IEnumerable<MethodDesc> GetGenericMethodHashtableEntries()
1133public IEnumerable<MethodDesc> GetExactMethodHashtableEntries()
1233public bool IsReflectionBlocked(MethodDesc method)
1235MethodDesc methodDefinition = method.GetMethodDefinition();
1241MethodDesc typicalMethodDefinition = methodDefinition.GetTypicalMethodDefinition();
1268public bool CanGenerateMetadata(MethodDesc method)
1287protected abstract MetadataCategory GetMetadataCategory(MethodDesc method);
1303public virtual void GetDependenciesDueToAccess(ref DependencyList dependencies, NodeFactory factory, MethodIL methodIL, MethodDesc calledMethod)
1311public virtual DependencyList GetDependenciesForCustomAttribute(NodeFactory factory, MethodDesc attributeCtor, CustomAttributeValue decodedValue, TypeSystemEntity parent)
1316public virtual void NoteOverridingMethod(MethodDesc baseMethod, MethodDesc overridingMethod, TypeSystemEntity origin = null)
1332public readonly MethodDesc Method;
1339public StackTraceMapping(MethodDesc method, int owningTypeHandle, int methodSignatureHandle, int methodNameHandle, int methodInstantiationArgumentCollectionHandle, StackTraceRecordFlags flags)
1346public readonly MethodDesc Method;
1350public ReflectionStackTraceMapping(MethodDesc method, int owningTypeHandle, int methodHandle)
1364public readonly MethodDesc Method;
1371public StackTraceRecordData(MethodDesc method, MetadataRecord owningType, MetadataRecord methodSignature, MetadataRecord methodName, MetadataRecord methodInstantiationArgumentCollection, StackTraceRecordFlags flags)
Compiler\MstatObjectDumper.cs (6)
40private List<(MethodDesc Method, string MangledName, int Size, int GcInfoSize)> _methods = new();
41private Dictionary<MethodDesc, int> _methodEhInfo = new();
43private Dictionary<MethodDesc, List<(MethodDesc Method, int MangledName)>> _deduplicatedBodies = new();
114if (!_deduplicatedBodies.TryGetValue(originalBody.Method, out List<(MethodDesc, int)> targetBodies))
115_deduplicatedBodies.Add(originalBody.Method, targetBodies = new List<(MethodDesc, int)>());
Compiler\TypePreinit.cs (33)
116private bool TryGetNestedPreinitResult(MethodDesc callingMethod, MetadataType type, Stack<MethodDesc> recursionProtect, ref int instructionCounter, out NestedPreinitResult result)
121recursionProtect ??= new Stack<MethodDesc>();
167private Status TryScanMethod(MethodDesc method, Value[] parameters, Stack<MethodDesc> recursionProtect, ref int instructionCounter, out Value returnValue)
179private Status TryScanMethod(MethodIL methodIL, Value[] parameters, Stack<MethodDesc> recursionProtect, ref int instructionCounter, out Value returnValue)
481MethodDesc method = (MethodDesc)methodIL.GetObject(reader.ReadILToken());
489MethodDesc directMethod = constrainedType.GetClosestDefType().TryResolveConstraintMethodApprox(method.OwningType, method, out bool forceUseRuntimeLookup, ref staticResolution);
535recursionProtect ??= new Stack<MethodDesc>();
553MethodDesc ctor = (MethodDesc)methodIL.GetObject(reader.ReadILToken());
626MethodDesc pointedMethod = methodPointer.PointedToMethod;
691recursionProtect ??= new Stack<MethodDesc>();
1029var method = methodIL.GetObject(reader.ReadILToken()) as MethodDesc;
1891private bool TryHandleIntrinsicCall(MethodDesc method, Value[] parameters, out Value retVal)
1979private static TypeDesc GetArgType(MethodDesc method, int index)
2602private readonly MethodDesc[] _methods;
2606: this(type, new MethodDesc[GetFieldCount(type)], fieldThatOwnsMemory)
2610private VTableLikeStructValue(MetadataType type, MethodDesc[] methods, FieldDesc fieldThatOwnsMemory)
2663foreach (MethodDesc method in _methods)
2680return new VTableLikeStructValue(_type, (MethodDesc[])_methods.Clone(), fieldThatOwnsMemory: null);
2749MethodDesc[] slots = new MethodDesc[GetFieldCount(mdType)];
2783MethodDesc method = _parent._methods[GetFieldIndex(field)];
3040public MethodDesc PointedToMethod { get; }
3042public MethodPointerValue(MethodDesc pointedToMethod)
3251private readonly MethodDesc _methodPointed;
3254public DelegateInstance(TypeDesc delegateType, MethodDesc methodPointed, ReferenceTypeValue firstParameter, AllocationSite allocationSite)
3277MethodDesc targetMethod = creationInfo.PossiblyUnresolvedTargetMethod.GetCanonMethodTarget(CanonicalFormKind.Specific);
3725public static Status Fail(MethodDesc method, ILOpcode opcode, string detail = null)
3730public static Status Fail(MethodDesc method, string detail)
Compiler\UsageBasedMetadataManager.cs (34)
55private readonly List<MethodDesc> _methodsWithMetadata = new List<MethodDesc>();
193protected override MetadataCategory GetMetadataCategory(MethodDesc method)
230out List<MetadataMapping<MethodDesc>> methodMappings,
231out Dictionary<MethodDesc, int> methodMetadataMappings,
241protected override void GetMetadataDependenciesDueToReflectability(ref DependencyList dependencies, NodeFactory factory, MethodDesc method)
247public override void GetNativeLayoutMetadataDependencies(ref DependencyList dependencies, NodeFactory factory, MethodDesc method)
271if (module.GetGlobalModuleType().GetStaticConstructor() is MethodDesc moduleCctor)
307MethodDesc invokeMethod = type.GetMethod("Invoke"u8, null);
322MethodDesc defaultConstructor = elementType.GetDefaultConstructor();
509foreach (MethodDesc method in type.GetMethods())
519MethodDesc reflectedMethod;
551public override void GetDependenciesDueToLdToken(ref DependencyList dependencies, NodeFactory factory, MethodDesc method)
557MethodDesc canonicalMethod = method.GetCanonMethodTarget(CanonicalFormKind.Specific);
570public override void GetDependenciesDueToDelegateCreation(ref CombinedDependencyList dependencies, NodeFactory factory, TypeDesc delegateType, MethodDesc target)
622public override void GetDependenciesForOverridingMethod(ref CombinedDependencyList dependencies, NodeFactory factory, MethodDesc decl, MethodDesc impl)
641protected override void GetDependenciesDueToMethodCodePresenceInternal(ref DependencyList dependencies, NodeFactory factory, MethodDesc method, MethodIL methodIL)
692public override void GetConditionalDependenciesDueToMethodCodePresence(ref CombinedDependencyList dependencies, NodeFactory factory, MethodDesc method)
694MethodDesc typicalMethod = method.GetTypicalMethodDefinition();
706public override void GetDependenciesDueToVirtualMethodReflectability(ref DependencyList dependencies, NodeFactory factory, MethodDesc method)
776public override void GetDependenciesDueToAccess(ref DependencyList dependencies, NodeFactory factory, MethodIL methodIL, MethodDesc calledMethod)
785public override DependencyList GetDependenciesForCustomAttribute(NodeFactory factory, MethodDesc attributeCtor, CustomAttributeValue decodedValue, TypeSystemEntity parent)
808public override void NoteOverridingMethod(MethodDesc baseMethod, MethodDesc overridingMethod, TypeSystemEntity origin)
841public static bool HasMismatchingAttributes(MethodDesc baseMethod, MethodDesc overridingMethod, string requiresAttributeName)
876var reflectableMethods = ReflectableEntityBuilder<MethodDesc>.Create();
877foreach (var methodWithMetadata in _methodsWithMetadata)
882foreach (var method in GetReflectableMethods())
893MethodDesc typicalMethod = method.GetTypicalMethodDefinition();
934if (FlowAnnotations.CompilerGeneratedState.TryGetUserMethodForCompilerGeneratedMember(methodILDefinition.OwningMethod, out var userMethod))
1023public bool GeneratesMetadata(MethodDesc methodDef)
1067public bool IsBlocked(MethodDesc methodDef)
IL\ILImporter.Scanner.cs (53)
34private readonly MethodDesc _canonMethod;
84public ILImporter(ILScanner compilation, MethodDesc method, MethodIL methodIL = null)
113MethodDesc sharedMethod = method.GetSharedRuntimeFormMethodTarget();
146MethodDesc method = _methodIL.OwningMethod;
168MethodDesc method = _methodIL.OwningMethod;
220private ISymbolNode GetGenericLookupHelper(ReadyToRunHelperId helperId, MethodDesc method)
332private IMethodNode GetMethodEntrypoint(MethodDesc method)
391|| !IsTaskConfigureAwait((MethodDesc)_methodIL.GetObject(reader.ReadILToken()))
403&& IsAsyncHelpersAwait((MethodDesc)_methodIL.GetObject(reader.ReadILToken()));
491if (!IsValueTaskAsTask((MethodDesc)_methodIL.GetObject(callToken)))
511MethodDesc ctorMethod = (MethodDesc)_methodIL.GetObject(ctorToken);
545var runtimeDeterminedMethod = (MethodDesc)_methodIL.GetObject(token);
546var method = (MethodDesc)_canonMethodIL.GetObject(token);
577MethodDesc asyncVariantMethod = _factory.TypeSystemContext.GetAsyncVariantMethod(method);
578MethodDesc asyncVariantRuntimeDeterminedMethod = _factory.TypeSystemContext.GetAsyncVariantMethod(runtimeDeterminedMethod);
586private void ImportCall(ILOpcode opcode, MethodDesc method, MethodDesc runtimeDeterminedMethod)
668MethodDesc ctor = Compilation.GetConstructorForCreateInstanceIntrinsic(type);
730MethodDesc methodAfterConstraintResolution = method;
755MethodDesc directMethod = constrained.GetClosestDefType().TryResolveConstraintMethodApprox(method.OwningType, method, out forceUseRuntimeLookup, ref staticResolution);
785MethodDesc targetMethod = methodAfterConstraintResolution;
833MethodDesc targetForDelegate = !resolvedConstraint || forceUseRuntimeLookup ? runtimeDeterminedMethod : targetMethod;
855MethodDesc targetOfLookup;
901MethodDesc concreteMethod = targetMethod;
1009MethodDesc methodToLookup = _compilation.GetTargetOfGenericVirtualMethodCall(runtimeDeterminedMethod);
1039MethodDesc slotDefiningMethod = targetMethod.IsNewSlot ?
1052var ctorMethod = (MethodDesc)_methodIL.GetObject(ctorToken);
1105private void RegisterDependenciesOnAwaitAwaiterInContinuation(MethodDesc runtimeDeterminedMethod, bool isUnsafe, string reason)
1130MethodDesc runtimeDeterminedResult = asyncHelpers
1134MethodDesc targetMethod = runtimeDeterminedResult.GetCanonMethodTarget(CanonicalFormKind.Specific);
1175MethodDesc stub = _compilation.PInvokeILProvider.GetCalliStub(
1226&& _methodIL.GetObject(reader.ReadILToken()) is MethodDesc { IsIntrinsic: true } intrinsicMethod
1361else if (obj is MethodDesc method)
1363_factory.MetadataManager.GetDependenciesDueToAccess(ref _dependencies, _factory, _methodIL, (MethodDesc)_canonMethodIL.GetObject(token));
1840private static bool IsTypeGetTypeFromHandle(MethodDesc method)
1854private static bool IsActivatorDefaultConstructorOf(MethodDesc method)
1868private static bool IsActivatorAllocatorOf(MethodDesc method)
1882private static bool IsEETypePtrOf(MethodDesc method)
1896private static bool IsRuntimeHelpersIsReferenceOrContainsReferences(MethodDesc method)
1910private static bool IsMemoryMarshalGetArrayDataReference(MethodDesc method)
1924private static bool IsAsyncHelpersAwait(MethodDesc method)
1940private static bool IsAsyncHelpersAwaitAwaiter(MethodDesc method, out bool isUnsafe)
1964private static bool IsTaskConfigureAwait(MethodDesc method)
1984private static bool IsValueTaskAsTask(MethodDesc method)
2001private static bool IsValueTaskCtor(MethodDesc method)
2044MethodDesc taskReturningMethod = _canonMethod.GetTargetOfAsyncVariant();
2051MethodDesc runtimeDeterminedCaller = _canonMethod.GetSharedRuntimeFormMethodTarget();
2054MethodDesc runtimeDeterminedResult;
2073MethodDesc targetMethod = runtimeDeterminedResult.GetCanonMethodTarget(CanonicalFormKind.Specific);
IL\RvaIntrinsicPatternAnalyzer.cs (9)
161MethodDesc constructor = (MethodDesc)methodIL.GetObject(reader.PeekILToken());
210if (!TryGetCallTarget(opcode, reader, methodIL, out MethodDesc method)
224if (!TryGetCallTarget(opcode, reader, methodIL, out MethodDesc method)
243private static bool TryGetCallTarget(ILOpcode opcode, in ILReader reader, MethodIL methodIL, out MethodDesc method)
246&& methodIL.GetObject(reader.PeekILToken()) is MethodDesc targetMethod)
322private static bool IsRuntimeHelpersInitializeArray(MethodDesc method)
335private static bool IsRuntimeHelpersCreateSpan(MethodDesc method, out TypeDesc elementType)
354private static bool IsRuntimeHelpersIntrinsic(MethodDesc method)
IL\Stubs\StartupCode\StartupCodeMainMethod.cs (12)
22private IReadOnlyCollection<MethodDesc> _libraryInitializers;
25public StartupCodeMainMethod(TypeDesc owningType, MethodDesc mainMethod, IReadOnlyCollection<MethodDesc> libraryInitializers, bool generateLibraryAndModuleInitializers)
76foreach (MethodDesc method in _libraryInitializers)
88MethodDesc initArgs = startup?.GetMethod(initArgsName, null);
97MethodDesc initEntryAssembly = startup?.GetMethod("InitializeEntryAssembly"u8, null);
106MethodDesc initApartmentState = startup?.GetMethod("InitializeApartmentState"u8, null);
123MethodDesc runModuleInitializers = startup?.GetMethod("RunModuleInitializers"u8, null);
143MethodDesc setLatchedExitCode = startup?.GetMethod("SetLatchedExitCode"u8, null);
144MethodDesc shutdown = startup?.GetMethod("Shutdown"u8, null);
210public MainMethodWrapper(TypeDesc owningType, MethodDesc mainMethod)
216public MethodDesc WrappedMethod
parent\parent\Common\Compiler\CachingVirtualMethodAlgorithm.cs (19)
15private readonly ConcurrentDictionary<TypeDesc, (MethodDesc Slot, MethodDesc Implementation)[]> _vtableCache
16= new ConcurrentDictionary<TypeDesc, (MethodDesc Slot, MethodDesc Implementation)[]>();
18private readonly Func<TypeDesc, (MethodDesc Slot, MethodDesc Implementation)[]> _vtableCreator;
23private (MethodDesc Slot, MethodDesc Implementation)[] ComputeVtable(TypeDesc type)
28var result = new ArrayBuilder<(MethodDesc Slot, MethodDesc Implementation)>(3 /* At least Equals/GetHashCode/ToString */);
30foreach (MethodDesc slotDecl in base.ComputeAllVirtualSlots(type))
38public override IEnumerable<MethodDesc> ComputeAllVirtualSlots(TypeDesc type)
46static IEnumerable<MethodDesc> GetCachedSlots(CachingVirtualMethodAlgorithm thisObj, TypeDesc type)
48foreach ((MethodDesc slot, _) in thisObj._vtableCache.GetOrAdd(type.GetTypeDefinition(), thisObj._vtableCreator))
55public override MethodDesc FindVirtualFunctionTargetMethodOnObjectType(MethodDesc targetMethod, TypeDesc objectType)
58MethodDesc targetMethodDefinition = targetMethod.GetMethodDefinition();
60MethodDesc slotDefiningMethod = targetMethodDefinition;
71MethodDesc result = kvp.Implementation;
parent\parent\Common\Compiler\CompilerTypeSystemContext.Async.cs (47)
16public static IEnumerable<MethodDesc> GetAllMethodsAndAsyncVariants(this TypeDesc type)
31private MethodDesc DecomposeAsyncVariant(MethodDesc method, out bool isAsyncVariant)
37private MethodDesc WrapAsAsyncVariant(MethodDesc originalMethod, MethodDesc resolvedMethod)
42MethodDesc asyncVariant = _context.GetAsyncVariantMethod(resolvedMethod);
55public override MethodDesc FindVirtualFunctionTargetMethodOnObjectType(MethodDesc targetMethod, TypeDesc objectType)
58MethodDesc result = base.FindVirtualFunctionTargetMethodOnObjectType(targetMethod, objectType);
65public override DefaultInterfaceMethodResolution ResolveInterfaceMethodToDefaultImplementationOnType(MethodDesc interfaceMethod, TypeDesc currentType, out MethodDesc impl)
75public override MethodDesc ResolveInterfaceMethodToStaticVirtualMethodOnType(MethodDesc interfaceMethod, TypeDesc currentType)
78MethodDesc result = base.ResolveInterfaceMethodToStaticVirtualMethodOnType(interfaceMethod, currentType);
84public override MethodDesc ResolveInterfaceMethodToVirtualMethodOnType(MethodDesc interfaceMethod, TypeDesc currentType)
87MethodDesc result = base.ResolveInterfaceMethodToVirtualMethodOnType(interfaceMethod, currentType);
93public override DefaultInterfaceMethodResolution ResolveVariantInterfaceMethodToDefaultImplementationOnType(MethodDesc interfaceMethod, TypeDesc currentType, out MethodDesc impl)
102public override MethodDesc ResolveVariantInterfaceMethodToStaticVirtualMethodOnType(MethodDesc interfaceMethod, TypeDesc currentType)
105MethodDesc result = base.ResolveVariantInterfaceMethodToStaticVirtualMethodOnType(interfaceMethod, currentType);
111public override MethodDesc ResolveVariantInterfaceMethodToVirtualMethodOnType(MethodDesc interfaceMethod, TypeDesc currentType)
114MethodDesc result = base.ResolveVariantInterfaceMethodToVirtualMethodOnType(interfaceMethod, currentType);
121public override IEnumerable<MethodDesc> ComputeAllVirtualSlots(TypeDesc type)
127internal static IEnumerable<MethodDesc> WithAsyncVariants(CompilerTypeSystemContext context, IEnumerable<MethodDesc> methods)
129foreach (MethodDesc method in methods)
172public MethodDesc GetTargetOfAsyncVariantMethod(MethodDesc asyncVariantMethod)
175MethodDesc result = asyncMethodVariantDefinition.Target;
191public MethodDesc GetAsyncVariantMethod(MethodDesc taskReturningMethod)
194MethodDesc taskReturningMethodDefinition = taskReturningMethod.GetTypicalMethodDefinition();
195MethodDesc result = _asyncVariantHashtable.GetOrCreateValue((EcmaMethod)taskReturningMethodDefinition);
210public MethodDesc GetTargetOfReturnDroppingThunk(MethodDesc returnDroppingThunk)
214MethodDesc result = returnDroppingThunkDefinition.AsyncVariantTarget;
241public MethodDesc GetReturnDroppingAsyncVariantMethod(MethodDesc asyncVariantMethod)
246MethodDesc typicalMethodDefinition = asyncVariantMethod.GetTypicalMethodDefinition();
247MethodDesc result = _returnDroppingHashtable.GetOrCreateValue((AsyncMethodVariant)typicalMethodDefinition);
273public AsyncResumptionStub GetAsyncResumptionStub(MethodDesc targetMethod, TypeDesc owningType)
280public readonly MethodDesc TargetMethod;
283public AsyncResumptionStubKey(MethodDesc targetMethod, TypeDesc owningType)
parent\parent\Common\Compiler\Dataflow\DynamicallyAccessedMembersBinder.cs (12)
38foreach (var c in typeDefinition.ApplyIncludeInherited(t => t.GetConstructorsOnType(filter: null, bindingFlags: BindingFlags.NonPublic), withInherited))
45foreach (var c in typeDefinition.ApplyIncludeInherited(t => t.GetConstructorsOnType(filter: null, bindingFlags: BindingFlags.Public), withInherited))
51foreach (var c in typeDefinition.GetConstructorsOnType(filter: m => m.IsPublic() && !m.HasMetadataParameters()))
58foreach (var m in typeDefinition.ApplyIncludeInherited(t => t.GetMethodsOnTypeHierarchy(filter: null, bindingFlags: BindingFlags.NonPublic | declaredOnlyFlags), withInherited))
64foreach (var m in typeDefinition.GetMethodsOnTypeHierarchy(filter: null, bindingFlags: BindingFlags.Public | declaredOnlyFlags))
140public static IEnumerable<MethodDesc> GetConstructorsOnType(this TypeDesc type, Func<MethodDesc, bool> filter, BindingFlags? bindingFlags = null)
148foreach (var method in type.GetMethods())
172public static IEnumerable<MethodDesc> GetMethodsOnTypeHierarchy(this TypeDesc type, Func<MethodDesc, bool> filter, BindingFlags? bindingFlags = null)
185foreach (var method in type.GetMethods())
493foreach (var m in type.GetMethods())
parent\parent\Common\TypeSystem\IL\HelperExtensions.cs (8)
30public static MethodDesc GetHelperEntryPoint(this TypeSystemContext context, ReadOnlySpan<byte> typeName, ReadOnlySpan<byte> methodName)
33MethodDesc helperMethod = helperType.GetKnownMethod(methodName, null);
37public static MethodDesc GetCoreLibEntryPoint(this TypeSystemContext context, ReadOnlySpan<byte> namespaceName, ReadOnlySpan<byte> typeName, ReadOnlySpan<byte> methodName, MethodSignature signature)
43public static MethodDesc GetOptionalHelperEntryPoint(this TypeSystemContext context, ReadOnlySpan<byte> typeName, ReadOnlySpan<byte> methodName)
46MethodDesc helperMethod = helperType?.GetMethod(methodName, null);
55public static void EmitCallThrowHelper(this ILCodeStream codeStream, ILEmitter emitter, MethodDesc method)
74public static MethodDesc GetKnownMethod(this TypeDesc type, ReadOnlySpan<byte> name, MethodSignature signature)
76MethodDesc method = type.GetMethod(name, signature);
parent\parent\Common\TypeSystem\Interop\IL\Marshaller.Aot.cs (38)
111var helper = Context.GetHelperEntryPoint("InteropHelpers"u8, "AllocMemoryForAnsiCharArray"u8);
123var helper = Context.GetHelperEntryPoint("InteropHelpers"u8, "WideCharArrayToAnsiCharArray"u8);
135var helper = Context.GetHelperEntryPoint("InteropHelpers"u8, "AnsiCharArrayToWideCharArray"u8);
148var helper = Context.GetHelperEntryPoint("InteropHelpers"u8, "WideCharToAnsiChar"u8);
160var helper = Context.GetHelperEntryPoint("InteropHelpers"u8, "AnsiCharToWideChar"u8);
209var helper = Context.GetHelperEntryPoint("InteropHelpers"u8, helperMethodName);
221var helper = Context.GetHelperEntryPoint("InteropHelpers"u8, helperMethodName);
236var helper = Context.GetHelperEntryPoint("InteropHelpers"u8, helperMethodName);
560protected abstract MethodDesc GetManagedToNativeHelper();
562protected abstract MethodDesc GetNativeToManagedHelper();
619protected override MethodDesc GetManagedToNativeHelper()
624protected override MethodDesc GetNativeToManagedHelper()
640protected override MethodDesc GetManagedToNativeHelper()
645protected override MethodDesc GetNativeToManagedHelper()
879MethodDesc getNativeSizeHelper = Context.GetHelperEntryPoint("InteropHelpers"u8, "AsAnyGetNativeSize"u8);
984MethodDesc guidCtorHandleMethod =
988MethodDesc helper = Context.GetHelperEntryPoint("InteropHelpers"u8, "ConvertManagedComInterfaceToNative"u8);
998MethodDesc helper = Context.GetHelperEntryPoint("InteropHelpers"u8, "ConvertManagedComInterfaceToIUnknown"u8);
1010MethodDesc helper = Context.GetHelperEntryPoint("InteropHelpers"u8, "ConvertNativeComInterfaceToManaged"u8);
1029var helper = InteropTypes.GetMarshal(Context).GetKnownMethod("FreeBSTR"u8, null);
1037var helper = Context.GetHelperEntryPoint("InteropHelpers"u8, "StringToAnsiBstrBuffer"u8);
1048var helper = Context.GetHelperEntryPoint("InteropHelpers"u8, "AnsiBstrBufferToString"u8);
1062var helper = InteropTypes.GetMarshal(Context).GetKnownMethod("FreeBSTR"u8, null);
1070var helper = InteropTypes.GetMarshal(Context).GetKnownMethod("StringToBSTR"u8, null);
1081var helper = Context.GetHelperEntryPoint("InteropHelpers"u8, "BstrBufferToString"u8);
1095var helper = Context.GetHelperEntryPoint("InteropHelpers"u8, "DateTimeToOleDateTime"u8);
1106var helper = Context.GetHelperEntryPoint("InteropHelpers"u8, "OleDateTimeToDateTime"u8);
1120var helper = Context.GetHelperEntryPoint("InteropHelpers"u8, "DecimalToOleCurrency"u8);
1131var helper = Context.GetHelperEntryPoint("InteropHelpers"u8, "OleCurrencyToDecimal"u8);
1171var helper = Context.GetHelperEntryPoint("InteropHelpers"u8, "ConvertObjectToVariant"u8);
1186var helper = Context.GetHelperEntryPoint("InteropHelpers"u8, "VariantToObject"u8);
1203var helper = Context.GetHelperEntryPoint("InteropHelpers"u8, "CleanupVariant"u8);
1227var getInstanceMethod = marshallerType.GetMethod(
1235var initializeCustomMarshallerMethod = Context.GetHelperEntryPoint("InteropHelpers"u8, "InitializeCustomMarshaller"u8);
1267var manageToNativeMethod = customMarshallerType.GetKnownMethod(
1296var marshalNativeToManagedMethod = customMarshallerType.GetKnownMethod(
1314var cleanupManagedDataMethod = customMarshallerType.GetKnownMethod(
1331var cleanupNativeDataMethod = customMarshallerType.GetKnownMethod(
Compiler\CallChainProfile.cs (21)
43private readonly Dictionary<MethodDesc, Dictionary<MethodDesc, int>> _resolvedProfileData;
64private Dictionary<MethodDesc, Dictionary<MethodDesc, int>> ResolveMethods(Dictionary<string, Dictionary<string, int>> profileData, CompilerTypeSystemContext context)
66var resolvedProfileData = new Dictionary<MethodDesc, Dictionary<MethodDesc, int>>();
67Dictionary<string, MethodDesc> nameToMethodDescMap = new Dictionary<string, MethodDesc>();
72var resolvedKeyMethod = CachedResolveMethodName(nameToMethodDescMap, keyAndMethods.Key, context);
80var resolvedCalledMethod = CachedResolveMethodName(nameToMethodDescMap ,methodAndHitCount.Key, context);
86resolvedProfileData.Add(resolvedKeyMethod, new Dictionary<MethodDesc, int>());
100private MethodDesc CachedResolveMethodName(Dictionary<string, MethodDesc> nameToMethodDescMap, string methodName, CompilerTypeSystemContext context)
102MethodDesc resolvedMethod = null;
126private MethodDesc ResolveMethodName(CompilerTypeSystemContext context, string methodName)
186var resolvedMethod = ResolveMethodName(context, resolvedModule, namespaceAndTypeName, methodNameWithoutType);
207var resolvedMethod = ResolveMethodName(context, module, namespaceAndTypeName, methodNameWithoutType);
228private MethodDesc ResolveMethodName(CompilerTypeSystemContext context, ModuleDesc module, string namespaceAndTypeName, string methodName)
235var resolvedMethod = resolvedType.GetMethod(Encoding.UTF8.GetBytes(methodName), null);
325public IReadOnlyDictionary<MethodDesc, Dictionary<MethodDesc, int>> ResolvedProfileData => _resolvedProfileData;
Compiler\DependencyAnalysis\ReadyToRunCodegenNodeFactory.cs (34)
74public HashSet<MethodDesc> CompiledMethodDefs;
131private NodeCache<MethodDesc, MethodWithGCInfo> _localMethodCache;
133public MethodWithGCInfo CompiledMethodNode(MethodDesc method)
140private bool CanPrecompileUnboxingStub(MethodDesc targetMethod)
162public bool NeedsUnboxingStub(MethodDesc method)
171public DependencyNodeCore<NodeFactory> UnboxingStub(MethodDesc targetMethod)
181MethodDesc thunk = targetMethod.IsSharedByGenericInstantiations && !targetMethod.HasInstantiation
188private WasmUnboxingStubTargetNode CreateWasmUnboxingStubTargetNode(MethodDesc targetMethod)
191MethodDesc thunk = targetMethod.IsSharedByGenericInstantiations && !targetMethod.HasInstantiation
254private NodeCache<MethodDesc, GVMDependenciesNode> _gvmDependenciesNode;
256public GVMDependenciesNode GVMDependencies(MethodDesc method)
259MethodDesc canonMethod = method.GetCanonMethodTarget(CanonicalFormKind.Specific);
260MethodDesc canonSlotMethodDefinition = MetadataVirtualMethodAlgorithm.FindSlotDefiningMethodForVirtualMethod(canonMethod.GetMethodDefinition());
264private NodeCache<MethodDesc, VirtualMethodUseNode> _virtualMethodUseNodes;
266public VirtualMethodUseNode VirtualMethodUse(MethodDesc method)
270MethodDesc canonMethod = method.GetCanonMethodTarget(CanonicalFormKind.Specific);
402_gvmDependenciesNode = new NodeCache<MethodDesc, GVMDependenciesNode>(method =>
412_virtualMethodUseNodes = new NodeCache<MethodDesc, VirtualMethodUseNode>(method =>
479_wasmUnboxingStubTargets = new NodeCache<MethodDesc, WasmUnboxingStubTargetNode>(CreateWasmUnboxingStubTargetNode);
483_localMethodCache = new NodeCache<MethodDesc, MethodWithGCInfo>(key =>
537_copiedMethodIL = new NodeCache<MethodDesc, CopiedMethodILNode>(method =>
665MethodDesc compilableMethod = method.Method.GetCanonMethodTarget(CanonicalFormKind.Specific);
711MethodDesc method = methodNode.Method;
740public HashSet<MethodDesc> BuildCompiledMethodDefsSet()
744var set = new HashSet<MethodDesc>();
873public readonly MethodDesc Method;
875public ILBodyFixupSignatureFixupKey(ReadyToRunFixupKind fixupKind, MethodDesc method)
890public ILBodyFixupSignature ILBodyFixupSignature(ReadyToRunFixupKind fixupKind, MethodDesc method)
1222foreach (MethodDesc method in ProfileDataManager.GetInputProfileDataMethodsForModule(inputModule))
1410private NodeCache<MethodDesc, CopiedMethodILNode> _copiedMethodIL;
1452public bool CanBeInGenericCycle(MethodDesc method)
1457MethodDesc methodDefinition = method.GetTypicalMethodDefinition();
1500private NodeCache<MethodDesc, WasmUnboxingStubTargetNode> _wasmUnboxingStubTargets;
1515public WasmTypeNode WasmTypeNode(MethodDesc method)
Compiler\ProfileData.cs (10)
37public MethodProfileData(MethodDesc method, MethodProfilingDataFlags flags, double exclusiveWeight, Dictionary<MethodDesc, int> callWeights, uint scenarioMask, PgoSchemaElem[] schemaData)
49public readonly MethodDesc Method;
53public readonly Dictionary<MethodDesc, int> CallWeights;
61public abstract MethodProfileData GetMethodProfileData(MethodDesc m);
63public abstract byte[] GetMethodBlockCount(MethodDesc m);
65public static void MergeProfileData(Dictionary<MethodDesc, MethodProfileData> mergedProfileData, ProfileData profileData)
81mergedCallWeights = new Dictionary<MethodDesc, int>(data.CallWeights);
135public override MethodProfileData GetMethodProfileData(MethodDesc m)
145public override byte[] GetMethodBlockCount(MethodDesc m)
Compiler\ProfileDataManager.cs (31)
45Func<MethodDesc, bool> canBeIncludedInCurrentCompilation,
102public IEnumerable<MethodDesc> GetInputProfileDataMethodsForModule(ModuleDesc moduleDesc)
107public bool IsMethodInInputProfileData(MethodDesc method)
112public MethodProfileData this[MethodDesc method]
133public MethodProfileData GetAllowSynthesis(Compilation comp, MethodDesc method, out bool isSynthesized)
176private PgoSchemaElem[] SynthesizeSchema(Compilation comp, MethodDesc method)
198MethodDesc targetMeth = obj as MethodDesc;
264IList<MethodDesc> compatible = _gdvEntityFinder.GetCompatibleWithDelegateInvoke(delegateSignature);
284Debug.Assert(value is MethodDesc or TypeDesc);
285if (value is MethodDesc md)
322private readonly Dictionary<MethodDesc, MethodProfileData> _profileData = new();
323private readonly Dictionary<ModuleDesc, HashSet<MethodDesc>> _placedProfileMethods = new();
324private readonly HashSet<MethodDesc> _placedProfileMethodsAll = new();
332public MethodProfileData this[MethodDesc method]
344foreach ((MethodDesc method, MethodProfileData profileData) in _profileData)
350public bool Contains(MethodDesc md) => _profileData.ContainsKey(md);
352private void AssociateMethodProfileDataWithModule(MethodDesc method, MethodProfileData profileData)
383if (!_placedProfileMethods.TryGetValue(home, out HashSet<MethodDesc> set))
384_placedProfileMethods.Add(home, set = new HashSet<MethodDesc>());
391public IEnumerable<MethodDesc> GetPlacedMethodsForModuleDesc(ModuleDesc moduleDesc)
396return Array.Empty<MethodDesc>();
412private readonly Dictionary<MethodSignature, List<MethodDesc>> _delegateTargets;
417Dictionary<MethodSignature, HashSet<MethodDesc>> delegateTargets = new();
426foreach (MethodDesc method in type.GetMethods())
434if (!delegateTargets.TryGetValue(method.Signature, out HashSet<MethodDesc> set))
435delegateTargets.Add(method.Signature, set = new HashSet<MethodDesc>());
480List<MethodDesc> list = new(kvp.Value);
493public IList<MethodDesc> GetCompatibleWithDelegateInvoke(MethodSignature delegateInvokeSignature)
495return _delegateTargets.TryGetValue(delegateInvokeSignature, out List<MethodDesc> methods) ? methods : Array.Empty<MethodDesc>();
Compiler\ReadyToRunCodegenCompilation.cs (36)
80public bool CanInline(MethodDesc caller, MethodDesc callee)
106MethodDesc calleeMethodImpl = callee.OwningType.FindVirtualFunctionTargetMethodOnObjectType(callee);
118public virtual MethodIL GetMethodIL(MethodDesc method)
128public bool IsEffectivelySealed(MethodDesc method)
133public MethodDesc ResolveVirtualMethod(MethodDesc declMethod, TypeDesc implType, out CORINFO_DEVIRTUALIZATION_DETAIL devirtualizationDetail)
183public sealed class ILCache : LockFreeReaderHashtable<MethodDesc, ILCache.MethodILData>
196protected override int GetKeyHashCode(MethodDesc key)
204protected override bool CompareKeyToValue(MethodDesc key, MethodILData value)
212protected override MethodILData CreateValueFromKey(MethodDesc key)
227public MethodDesc Method;
259public void AddCompilationRoot(MethodDesc method, bool rootMinimalDependencies, string reason)
261MethodDesc canonMethod = method.GetCanonMethodTarget(CanonicalFormKind.Specific);
308private readonly Func<MethodDesc, string> _printReproInstructions;
312private readonly HashSet<MethodDesc> _methodsWhichNeedMutableILBodies = new HashSet<MethodDesc>();
347Func<MethodDesc, string> printReproInstructions,
460HashSet<MethodDesc> compiledMethodDefs = null;
487private void RewriteComponentFile(string inputFile, string outputFile, string ownerExecutableName, HashSet<MethodDesc> compiledMethodDefs)
703public void PrepareForCompilationRetry(MethodWithGCInfo methodToBeRecompiled, IEnumerable<MethodDesc> methodsThatNeedILBodies)
710foreach (var method in methodsThatNeedILBodies)
750var method = methodCodeNodeNeedingCode.Method;
751var typicalDef = method.GetTypicalMethodDefinition();
806void EnsureGeneratedILTokensAreAvailable(MethodDesc method)
847MethodDesc[] mutableMethodBodyNeedList = new MethodDesc[_methodsWhichNeedMutableILBodies.Count];
851Comparison<MethodDesc> comparison = (MethodDesc a, MethodDesc b) => comparer.Compare(a, b);
855foreach (var method in mutableMethodBodyNeedList)
924MethodDesc method = methodCodeNodeNeedingCode.Method;
976private void EnsureInstantiationReferencesArePresentForExternalMethod(MethodDesc method)
987private void AddNecessaryAsyncReferences(MethodDesc method)
1012MethodDesc[] requiredMethods =
1078public string GetReproInstructions(MethodDesc method)
Compiler\ReadyToRunCompilationModuleGroupBase.cs (24)
54private readonly ConcurrentDictionary<MethodDesc, bool> _versionsWithMethodCache = new ConcurrentDictionary<MethodDesc, bool>();
55private readonly Func<MethodDesc, bool> _versionsWithMethodUncached;
56private readonly ConcurrentDictionary<MethodDesc, bool> _crossModuleInlineableCache = new ConcurrentDictionary<MethodDesc, bool>();
57private readonly Func<MethodDesc, bool> _crossModuleInlineableCacheUncached;
60private readonly ConcurrentDictionary<MethodDesc, bool> _crossModuleCompilableCache = new ConcurrentDictionary<MethodDesc, bool>();
61private readonly Func<MethodDesc, bool> _crossModuleCompilableCacheUncached;
105public sealed override bool ContainsMethodBody(MethodDesc method, bool unboxingStub)
123protected abstract bool ContainsMethodBodyCore(MethodDesc method, bool unboxingStub);
141protected bool CompileVersionBubbleGenericsIntoCurrentModule(MethodDesc method)
406public sealed override bool VersionsWithMethodBody(MethodDesc method)
411private bool VersionsWithMethodUncached(MethodDesc method)
427public sealed override bool CanInline(MethodDesc callerMethod, MethodDesc calleeMethod)
444public bool IsNonVersionableWithILTokensThatDoNotNeedTranslation(MethodDesc method)
452public override bool CrossModuleCompileable(MethodDesc method)
460private bool CrossModuleCompileableUncached(MethodDesc method)
527public override bool CrossModuleInlineable(MethodDesc method)
536private bool CrossModuleInlineableInternal(MethodDesc method)
541private bool CrossModuleInlineableUncached(MethodDesc method)
728public sealed override bool GeneratesPInvoke(MethodDesc method)
912entityDefinitionInstantiation = ((MethodDesc)entityWithInstantiation).GetTypicalMethodDefinition().Instantiation;
JitInterface\CorInfoImpl.ReadyToRun.cs (75)
143public readonly MethodDesc Method;
150public MethodWithToken(MethodDesc method, ModuleToken token, TypeDesc constrainedType, bool unboxing, TypeSystemEntity genericContextObject, TypeDesc devirtualizedMethodOwner = null, bool forceOwningTypeFromMethodDesc = false)
153Debug.Assert(genericContextObject is null or MethodDesc or TypeDesc);
218if (genericContextObject is MethodDesc methodContext)
438public TypeDesc ContextType { get { return (Context is MethodDesc contextAsMethod ? contextAsMethod.OwningType : (TypeDesc)Context); } }
440public MethodDesc ContextMethod { get { return (MethodDesc)Context; } }
455if (Context is MethodDesc contextAsMethod)
483private HashSet<MethodDesc> _inlinedMethods;
486private List<MethodDesc> _ilBodiesNeeded;
488private HashSet<MethodDesc> _synthesizedPgoDependencies;
517MethodDesc asyncResumptionStub = _compilation.TypeSystemContext.GetAsyncResumptionStub(MethodBeingCompiled, MethodBeingCompiled.OwningType);
549public static bool ShouldSkipCompilation(InstructionSetSupport instructionSetSupport, MethodDesc methodNeedingCode, ReadyToRunCodegenCompilation compilation = null)
592public static bool ShouldCodeNotBeCompiledIntoFinalImage(InstructionSetSupport instructionSetSupport, MethodDesc method)
707private static ConditionalWeakTable<MethodDesc, DeterminismData> _determinismTable = new ConditionalWeakTable<MethodDesc, DeterminismData>();
766public static bool IsMethodCompilable(Compilation compilation, MethodDesc method)
827var typicalDef = MethodBeingCompiled.GetTypicalMethodDefinition();
858_ilBodiesNeeded = _ilBodiesNeeded ?? new List<MethodDesc>();
978MethodDesc targetMethodDesc = HandleToObject(pTargetMethod.hMethod);
1347var method = HandleToObject(ftn);
1368private MethodWithToken ComputeMethodWithToken(MethodDesc method, ref CORINFO_RESOLVED_TOKEN pResolvedToken, TypeDesc constrainedType, bool unboxing)
1383ModuleToken _HandleToModuleToken(ref CORINFO_RESOLVED_TOKEN pResolvedToken, MethodDesc methodDesc, out TypeSystemEntity context, ref TypeDesc constrainedType, out bool strippedInstantiation)
1443if (resultDef is MethodDesc resultMethod)
1450var primaryMethod = resultMethod.GetPrimaryMethodDesc();
1757MethodDesc callerMethod = HandleToObject(callerHandle);
1920out MethodDesc methodToCall,
1921out MethodDesc targetMethod,
1923out MethodDesc originalMethod,
1925out MethodDesc callerMethod,
1953MethodDesc versioningCallerMethod = _compilation.TypeSystemContext.IsUnboxingThunk(callerMethod)
1997MethodDesc methodAfterConstraintResolution = originalMethod;
2012MethodDesc methodOnUnderlyingType = constrainedType.UnderlyingType.FindVirtualFunctionTargetMethodOnObjectType(originalMethod);
2020MethodDesc directMethod = constrainedType.TryResolveConstraintMethodApprox(exactType, originalMethod, out forceUseRuntimeLookup, ref dimResolution);
2112var rawMethod = (MethodDesc)methodIL.GetMethodILScopeDefinition().GetObject((int)pResolvedToken.token);
2204MethodDesc canonMethod = (isArrayConstructor ? null : targetMethod.GetCanonMethodTarget(CanonicalFormKind.Specific));
2403MethodDesc method = HandleToObject(ftn);
2408private void PrepareForUseAsAFunctionPointer(MethodDesc method)
2453private void UpdateConstLookupWithRequiresRuntimeJitSymbolIfNeeded(ref CORINFO_CONST_LOOKUP constLookup, MethodDesc method)
2475MethodDesc methodToCall;
2476MethodDesc targetMethod;
2478MethodDesc originalMethod;
2480MethodDesc callerMethod;
2577MethodDesc nonUnboxingMethod = methodToCall;
2604MethodDesc compilableTarget = nonUnboxingMethod.GetCanonMethodTarget(CanonicalFormKind.Specific);
2662MethodDesc canonMethod = targetMethod.GetCanonMethodTarget(CanonicalFormKind.Specific);
2745MethodDesc templateMethod,
2746MethodDesc callerHandle,
2764MethodDesc contextMethod = callerHandle;
2831if (helperArg is MethodDesc methodDesc)
2834MethodDesc sharedMethod = methodIL.OwningMethod.GetSharedRuntimeFormMethodTarget();
2858HandleToObject(pResolvedToken.hMethod) is MethodDesc declaringMethod &&
2895MethodDesc templateMethod = null;
2899MethodDesc md = HandleToObject(pResolvedToken.hMethod);
2931MethodDesc declaringMethod = HandleToObject(pResolvedToken.hMethod);
3050MethodDesc md = HandleToObject(pResolvedToken.hMethod);
3084private MethodDesc getUnboxingThunk(MethodDesc method)
3092MethodDesc methodDesc = HandleToObject(handle);
3111private void PreventRecursiveFieldInlinesOutsideVersionBubble(FieldDesc field, MethodDesc callerMethod)
3121private void EncodeFieldBaseOffset(FieldDesc field, ref CORINFO_RESOLVED_TOKEN pResolvedToken, CORINFO_FIELD_INFO* pResult, MethodDesc callerMethod)
3411MethodDesc methodDesc = HandleToObject(method);
3439var method = HandleToObject(handle);
3568private readonly Stack<HashSet<MethodDesc>> _stashedInlinedMethods = new Stack<HashSet<MethodDesc>>();
3583MethodDesc inlinee = HandleToObject(inlineeHnd);
3598HashSet<MethodDesc> previouslyStashedInlinees = _stashedInlinedMethods.Pop();
3601previouslyStashedInlinees = previouslyStashedInlinees ?? new HashSet<MethodDesc>();
3602foreach (var inlineeInHashSet in _inlinedMethods)
3608_inlinedMethods = _inlinedMethods ?? new HashSet<MethodDesc>();
3611var typicalMethod = inlinee.GetTypicalMethodDefinition();
3618_ilBodiesNeeded = _ilBodiesNeeded ?? new List<MethodDesc>();
3651_ilBodiesNeeded = _ilBodiesNeeded ?? new List<MethodDesc>();
3772MethodDesc method = HandleToObject(ftn);
ObjectWriter\ProfileFileBuilder.cs (9)
33public readonly MethodDesc Caller;
36public readonly MethodDesc Callee;
42public CallInfo(MethodDesc caller, OutputNode callerNode, int callerRVA, MethodDesc callee, OutputNode calleeNode, int calleeRVA, int callCount, CrossPageCall callType)
60private Dictionary<MethodDesc, ISymbolDefinitionNode> _symbolMethodMap;
135_symbolMethodMap = new Dictionary<MethodDesc, ISymbolDefinitionNode>();
153foreach (KeyValuePair<MethodDesc, Dictionary<MethodDesc, int>> kvpCallerCalleeCount in _callChainProfile.ResolvedProfileData)
163foreach (KeyValuePair<MethodDesc, int> kvpCalleeCount in kvpCallerCalleeCount.Value)
parent\parent\Common\Compiler\CachingVirtualMethodAlgorithm.cs (19)
15private readonly ConcurrentDictionary<TypeDesc, (MethodDesc Slot, MethodDesc Implementation)[]> _vtableCache
16= new ConcurrentDictionary<TypeDesc, (MethodDesc Slot, MethodDesc Implementation)[]>();
18private readonly Func<TypeDesc, (MethodDesc Slot, MethodDesc Implementation)[]> _vtableCreator;
23private (MethodDesc Slot, MethodDesc Implementation)[] ComputeVtable(TypeDesc type)
28var result = new ArrayBuilder<(MethodDesc Slot, MethodDesc Implementation)>(3 /* At least Equals/GetHashCode/ToString */);
30foreach (MethodDesc slotDecl in base.ComputeAllVirtualSlots(type))
38public override IEnumerable<MethodDesc> ComputeAllVirtualSlots(TypeDesc type)
46static IEnumerable<MethodDesc> GetCachedSlots(CachingVirtualMethodAlgorithm thisObj, TypeDesc type)
48foreach ((MethodDesc slot, _) in thisObj._vtableCache.GetOrAdd(type.GetTypeDefinition(), thisObj._vtableCreator))
55public override MethodDesc FindVirtualFunctionTargetMethodOnObjectType(MethodDesc targetMethod, TypeDesc objectType)
58MethodDesc targetMethodDefinition = targetMethod.GetMethodDefinition();
60MethodDesc slotDefiningMethod = targetMethodDefinition;
71MethodDesc result = kvp.Implementation;
parent\parent\Common\Compiler\CompilerTypeSystemContext.Async.cs (47)
16public static IEnumerable<MethodDesc> GetAllMethodsAndAsyncVariants(this TypeDesc type)
31private MethodDesc DecomposeAsyncVariant(MethodDesc method, out bool isAsyncVariant)
37private MethodDesc WrapAsAsyncVariant(MethodDesc originalMethod, MethodDesc resolvedMethod)
42MethodDesc asyncVariant = _context.GetAsyncVariantMethod(resolvedMethod);
55public override MethodDesc FindVirtualFunctionTargetMethodOnObjectType(MethodDesc targetMethod, TypeDesc objectType)
58MethodDesc result = base.FindVirtualFunctionTargetMethodOnObjectType(targetMethod, objectType);
65public override DefaultInterfaceMethodResolution ResolveInterfaceMethodToDefaultImplementationOnType(MethodDesc interfaceMethod, TypeDesc currentType, out MethodDesc impl)
75public override MethodDesc ResolveInterfaceMethodToStaticVirtualMethodOnType(MethodDesc interfaceMethod, TypeDesc currentType)
78MethodDesc result = base.ResolveInterfaceMethodToStaticVirtualMethodOnType(interfaceMethod, currentType);
84public override MethodDesc ResolveInterfaceMethodToVirtualMethodOnType(MethodDesc interfaceMethod, TypeDesc currentType)
87MethodDesc result = base.ResolveInterfaceMethodToVirtualMethodOnType(interfaceMethod, currentType);
93public override DefaultInterfaceMethodResolution ResolveVariantInterfaceMethodToDefaultImplementationOnType(MethodDesc interfaceMethod, TypeDesc currentType, out MethodDesc impl)
102public override MethodDesc ResolveVariantInterfaceMethodToStaticVirtualMethodOnType(MethodDesc interfaceMethod, TypeDesc currentType)
105MethodDesc result = base.ResolveVariantInterfaceMethodToStaticVirtualMethodOnType(interfaceMethod, currentType);
111public override MethodDesc ResolveVariantInterfaceMethodToVirtualMethodOnType(MethodDesc interfaceMethod, TypeDesc currentType)
114MethodDesc result = base.ResolveVariantInterfaceMethodToVirtualMethodOnType(interfaceMethod, currentType);
121public override IEnumerable<MethodDesc> ComputeAllVirtualSlots(TypeDesc type)
127internal static IEnumerable<MethodDesc> WithAsyncVariants(CompilerTypeSystemContext context, IEnumerable<MethodDesc> methods)
129foreach (MethodDesc method in methods)
172public MethodDesc GetTargetOfAsyncVariantMethod(MethodDesc asyncVariantMethod)
175MethodDesc result = asyncMethodVariantDefinition.Target;
191public MethodDesc GetAsyncVariantMethod(MethodDesc taskReturningMethod)
194MethodDesc taskReturningMethodDefinition = taskReturningMethod.GetTypicalMethodDefinition();
195MethodDesc result = _asyncVariantHashtable.GetOrCreateValue((EcmaMethod)taskReturningMethodDefinition);
210public MethodDesc GetTargetOfReturnDroppingThunk(MethodDesc returnDroppingThunk)
214MethodDesc result = returnDroppingThunkDefinition.AsyncVariantTarget;
241public MethodDesc GetReturnDroppingAsyncVariantMethod(MethodDesc asyncVariantMethod)
246MethodDesc typicalMethodDefinition = asyncVariantMethod.GetTypicalMethodDefinition();
247MethodDesc result = _returnDroppingHashtable.GetOrCreateValue((AsyncMethodVariant)typicalMethodDefinition);
273public AsyncResumptionStub GetAsyncResumptionStub(MethodDesc targetMethod, TypeDesc owningType)
280public readonly MethodDesc TargetMethod;
283public AsyncResumptionStubKey(MethodDesc targetMethod, TypeDesc owningType)
parent\parent\Common\Compiler\Dataflow\DynamicallyAccessedMembersBinder.cs (12)
38foreach (var c in typeDefinition.ApplyIncludeInherited(t => t.GetConstructorsOnType(filter: null, bindingFlags: BindingFlags.NonPublic), withInherited))
45foreach (var c in typeDefinition.ApplyIncludeInherited(t => t.GetConstructorsOnType(filter: null, bindingFlags: BindingFlags.Public), withInherited))
51foreach (var c in typeDefinition.GetConstructorsOnType(filter: m => m.IsPublic() && !m.HasMetadataParameters()))
58foreach (var m in typeDefinition.ApplyIncludeInherited(t => t.GetMethodsOnTypeHierarchy(filter: null, bindingFlags: BindingFlags.NonPublic | declaredOnlyFlags), withInherited))
64foreach (var m in typeDefinition.GetMethodsOnTypeHierarchy(filter: null, bindingFlags: BindingFlags.Public | declaredOnlyFlags))
140public static IEnumerable<MethodDesc> GetConstructorsOnType(this TypeDesc type, Func<MethodDesc, bool> filter, BindingFlags? bindingFlags = null)
148foreach (var method in type.GetMethods())
172public static IEnumerable<MethodDesc> GetMethodsOnTypeHierarchy(this TypeDesc type, Func<MethodDesc, bool> filter, BindingFlags? bindingFlags = null)
185foreach (var method in type.GetMethods())
493foreach (var m in type.GetMethods())
parent\parent\Common\JitInterface\CorInfoImpl.cs (78)
78private Dictionary<MethodDesc, PgoInstrumentationResults> _pgoResults = new Dictionary<MethodDesc, PgoInstrumentationResults>();
316MethodDesc method = (MethodDesc)handleToObject[likelyClassMethods->handle];
528MethodDesc[] inlineeArray;
531inlineeArray = new MethodDesc[_inlinedMethods.Count];
537inlineeArray = Array.Empty<MethodDesc>();
650private MethodDesc MethodBeingCompiled
758private Dictionary<MethodDesc, IntPtr> _methodILScopeToHandle = new Dictionary<MethodDesc, IntPtr>(new JitObjectComparer());
792private MethodDesc HandleToObject(CORINFO_METHOD_STRUCT_* method) => (MethodDesc)HandleToObject((void*)method);
793private CORINFO_METHOD_STRUCT_* ObjectToHandle(MethodDesc method) => (CORINFO_METHOD_STRUCT_*)ObjectToHandle((object)method);
806MethodDesc owningMethod = methodIL.OwningMethod;
812private bool Get_CORINFO_METHOD_INFO(MethodDesc method, MethodIL methodIL, CORINFO_METHOD_INFO* methodInfo)
881private void Get_CORINFO_SIG_INFO(MethodDesc method, CORINFO_SIG_INFO* sig, MethodILScope scope, bool suppressHiddenArgument = false)
1046private CORINFO_CONTEXT_STRUCT* contextFromMethod(MethodDesc method)
1061private MethodDesc methodFromContext(CORINFO_CONTEXT_STRUCT* contextStruct)
1107MethodDesc method = HandleToObject(ftn);
1113MethodDesc method = HandleToObject(ftn);
1141private uint getMethodAttribsInternal(MethodDesc method)
1262MethodDesc caller = HandleToObject(callerHnd);
1284MethodDesc callee = exactCalleeHnd == null ? null : HandleToObject(exactCalleeHnd);
1296MethodDesc method = HandleToObject(ftn);
1329MethodDesc method = HandleToObject(ftn);
1334if (ctx is MethodDesc methodFromCtx && context != contextFromMethodBeingCompiled())
1341MethodDesc instantiatedMethod = _compilation.TypeSystemContext.GetMethodForInstantiatedType(method.GetTypicalMethodDefinition(), instantiatedCtxType);
1363MethodDesc meth1 = HandleToObject(methHnd1);
1364MethodDesc meth2 = HandleToObject(methHnd2);
1375MethodDesc callerMethod = HandleToObject(callerHnd);
1376MethodDesc calleeMethod = HandleToObject(calleeHnd);
1443var m = HandleToObject(method);
1464MethodDesc decl = HandleToObject(info->virtualMethod);
1479MethodDesc originalImpl = _compilation.ResolveVirtualMethod(decl, objType, out info->detail);
1502MethodDesc impl = originalImpl.GetCanonMethodTarget(CanonicalFormKind.Specific);
1506MethodDesc nonUnboxingImpl = impl;
1590MethodDesc instArgTarget = unboxingStub ? nonUnboxingImpl : impl;
1672static CORINFO_RESOLVED_TOKEN CreateResolvedTokenFromMethod(CorInfoImpl jitInterface, MethodDesc method
1712MethodDesc method = HandleToObject(ftn);
1768MethodDesc methodDesc = HandleToObject(method);
1780private static CorInfoCallConvExtension GetUnmanagedCallConv(MethodDesc methodDesc, out bool suppressGCTransition)
1870if (result is MethodDesc methodResult)
1888MethodDesc owningMethod = methodIL.OwningMethod;
1909var methodContext = (MethodDesc)typeOrMethodContext;
1952result = _compilation.TypeSystemContext.GetAsyncVariantMethod((MethodDesc)result);
1961if (result is MethodDesc method)
1965MethodDesc sharedMethod = methodIL.OwningMethod.GetSharedRuntimeFormMethodTarget();
1967Debug.Assert(((MethodDesc)result).IsRuntimeDeterminedExactMethod);
1974MethodDesc sharedMethod = methodIL.OwningMethod.GetSharedRuntimeFormMethodTarget();
1984MethodDesc sharedMethod = methodIL.OwningMethod.GetSharedRuntimeFormMethodTarget();
2024if (result is MethodDesc method)
2118private static bool HasCallableAsyncVariant(MethodDesc method)
2159Get_CORINFO_SIG_INFO(((MethodDesc)methodIL.GetObject((int)methTOK)), sig: sig, methodIL);
2915MethodDesc md = method == null ? MethodBeingCompiled : HandleToObject(method);
3700MethodDesc caller = HandleToObject(callerHandle);
3703MethodDesc taskReturningMethod = caller.GetTargetOfAsyncVariant();
3711MethodDesc runtimeDeterminedCaller = caller.GetSharedRuntimeFormMethodTarget();
3714MethodDesc result;
3715MethodDesc runtimeDeterminedResult;
3736MethodDesc targetMethod = runtimeDeterminedResult.GetCanonMethodTarget(CanonicalFormKind.Specific);
3778MethodDesc caller = HandleToObject(callerHandle);
3779MethodDesc awaitAwaiterMethod = HandleToObject(pResolvedToken.hMethod);
3785var runtimeDeterminedAwaitAwaiterMethod = (MethodDesc)GetRuntimeDeterminedObjectForToken(ref pResolvedToken);
3796MethodDesc typicalMethod = asyncHelpers.GetKnownMethod(
3799MethodDesc result = typicalMethod.MakeInstantiatedMethod(awaiterType);
3800MethodDesc runtimeDeterminedResult = typicalMethod.MakeInstantiatedMethod(runtimeDeterminedAwaiterType);
3802MethodDesc targetMethod = runtimeDeterminedResult.GetCanonMethodTarget(CanonicalFormKind.Specific);
3862MethodDesc method = HandleToObject(hMethod);
3869MethodDesc methodDefinition = method.GetTypicalMethodDefinition();
3899MethodDesc method = HandleToObject(ftn);
3903private static string getMethodNameFromMetadataImpl(MethodDesc method, out string className, out string namespaceName, string[] enclosingClassName)
3935MethodDesc method = HandleToObject(ftn);
4160private static CORINFO_RUNTIME_LOOKUP_KIND GetGenericRuntimeLookupKind(MethodDesc method)
4175MethodDesc method = HandleToObject(context);
5014MethodDesc methodDesc = HandleToObject(ftnHnd);
5024_synthesizedPgoDependencies = new HashSet<MethodDesc>();
parent\parent\Common\TypeSystem\IL\HelperExtensions.cs (8)
30public static MethodDesc GetHelperEntryPoint(this TypeSystemContext context, ReadOnlySpan<byte> typeName, ReadOnlySpan<byte> methodName)
33MethodDesc helperMethod = helperType.GetKnownMethod(methodName, null);
37public static MethodDesc GetCoreLibEntryPoint(this TypeSystemContext context, ReadOnlySpan<byte> namespaceName, ReadOnlySpan<byte> typeName, ReadOnlySpan<byte> methodName, MethodSignature signature)
43public static MethodDesc GetOptionalHelperEntryPoint(this TypeSystemContext context, ReadOnlySpan<byte> typeName, ReadOnlySpan<byte> methodName)
46MethodDesc helperMethod = helperType?.GetMethod(methodName, null);
55public static void EmitCallThrowHelper(this ILCodeStream codeStream, ILEmitter emitter, MethodDesc method)
74public static MethodDesc GetKnownMethod(this TypeDesc type, ReadOnlySpan<byte> name, MethodSignature signature)
76MethodDesc method = type.GetMethod(name, signature);
parent\parent\Common\TypeSystem\Common\MetadataVirtualMethodAlgorithm.cs (134)
14private sealed class MethodDescHashtable : LockFreeReaderHashtable<MethodDesc, MethodDesc>
16protected override int GetKeyHashCode(MethodDesc key)
21protected override int GetValueHashCode(MethodDesc value)
26protected override bool CompareKeyToValue(MethodDesc key, MethodDesc value)
32protected override bool CompareValueToValue(MethodDesc value1, MethodDesc value2)
38protected override MethodDesc CreateValueFromKey(MethodDesc key)
46private MethodDesc[] _members = MethodDesc.EmptyMethods;
49private MethodDesc[] _methodsRequiringSlotUnification = MethodDesc.EmptyMethods;
57private MethodDesc[] _arrayToEnumerate;
59private MethodDesc _current;
61internal Enumerator(MethodDesc[] arrayToEnumerate)
65_current = default(MethodDesc);
80_current = default(MethodDesc);
84public MethodDesc Current
95private readonly MethodDesc[] _arrayToEnumerate;
97public Enumerable(MethodDesc[] arrayToEnumerate)
108public UnificationGroup(MethodDesc definingMethod)
114public MethodDesc DefiningMethod;
120public void AddMethodRequiringSlotUnification(MethodDesc method)
133public bool RequiresSlotUnification(MethodDesc method)
143public void SetDefiningMethod(MethodDesc newDefiningMethod)
151MethodDesc oldDefiningMethod = DefiningMethod;
159public void AddToGroup(MethodDesc method)
182public void RemoveFromGroup(MethodDesc method)
198public bool IsInGroupOrIsDefiningSlot(MethodDesc method)
206public bool IsInGroup(MethodDesc method)
218public override MethodDesc FindVirtualFunctionTargetMethodOnObjectType(MethodDesc targetMethod, TypeDesc objectType)
229private static MethodDesc FindVirtualFunctionTargetMethodOnObjectType(MethodDesc targetMethod, MetadataType objectType)
233MethodDesc initialTargetMethod = targetMethod;
242MethodDesc initialTargetMethodDefinition = targetMethod;
253MethodDesc resolutionTarget = FindNameSigOverrideForVirtualMethod(group.DefiningMethod, uninstantiatedType);
281private static MethodDesc FindImplFromDeclFromMethodImpls(MetadataType type, MethodDesc decl)
293MethodDesc recordDecl = record.Decl;
309private static MethodDesc FindInterfaceImplFromDeclFromMethodImpls(MetadataType type, MethodDesc decl)
322MethodDesc recordDecl = foundMethodImpls[i].Decl;
381private static MethodDesc FindMatchingVirtualMethodOnTypeByNameAndSig(MethodDesc targetMethod, DefType currentType, bool reverseMethodSearch, Func<MethodDesc, MethodDesc, bool> nameSigMatchMethodIsValidCandidate)
386MethodDesc implMethod = null;
387MethodDesc implMethodEquivalent = null;
388foreach (MethodDesc candidate in currentType.GetAllVirtualMethods())
420private static MethodDesc FindNameSigOverrideForVirtualMethod(MethodDesc targetMethod, MetadataType currentType)
424MethodDesc nameSigOverride = FindMatchingVirtualMethodOnTypeByNameAndSigWithSlotCheck(targetMethod, currentType, reverseMethodSearch:true);
440public static MethodDesc FindSlotDefiningMethodForVirtualMethod(MethodDesc method)
452MethodDesc foundMethod = FindMatchingVirtualMethodOnTypeByNameAndSig(method, currentType, reverseMethodSearch: true, nameSigMatchMethodIsValidCandidate:null);
476private static MethodDesc FindMatchingVirtualMethodOnTypeByNameAndSigWithSlotCheck(MethodDesc method, DefType currentType, bool reverseMethodSearch)
481private static readonly Func<MethodDesc, MethodDesc, bool> s_VerifyMethodsHaveTheSameVirtualSlot = VerifyMethodsHaveTheSameVirtualSlot;
484private static bool VerifyMethodsHaveTheSameVirtualSlot(MethodDesc slotDefiningMethod, MethodDesc methodToVerify)
486MethodDesc slotDefiningMethodOfMethodToVerify = FindSlotDefiningMethodForVirtualMethod(methodToVerify);
490private static readonly Func<MethodDesc, MethodDesc, bool> s_VerifyMethodIsPublic = VerifyMethodIsPublic;
493private static bool VerifyMethodIsPublic(MethodDesc slotDefiningMethod, MethodDesc methodToVerify)
500MethodDesc originalDefiningMethod = unificationGroup.DefiningMethod;
502MethodDesc methodImpl = FindImplFromDeclFromMethodImpls(currentType, unificationGroup.DefiningMethod);
513MethodDesc nameSigMatchMethod = FindMatchingVirtualMethodOnTypeByNameAndSigWithSlotCheck(unificationGroup.DefiningMethod, currentType, reverseMethodSearch: true);
550foreach (MethodDesc memberMethod in unificationGroup.Members)
557MethodDesc nameSigMatchMemberMethod = FindMatchingVirtualMethodOnTypeByNameAndSigWithSlotCheck(memberMethod, currentType, reverseMethodSearch: true);
567foreach (MethodDesc separatedMethod in MethodDescHashtable.Enumerator.Get(separatedMethods))
576MethodDesc declSlot = FindSlotDefiningMethodForVirtualMethod(methodImplRecord.Decl);
577MethodDesc implSlot = FindSlotDefiningMethodForVirtualMethod(methodImplRecord.Body);
611foreach (MethodDesc methodImplRequiredToRemainInEffect in addDeclGroup.MethodsRequiringSlotUnification)
623foreach (MethodDesc addDeclGroupMemberMethod in addDeclGroup.Members)
653public override MethodDesc ResolveInterfaceMethodToVirtualMethodOnType(MethodDesc interfaceMethod, TypeDesc currentType)
658public override MethodDesc ResolveVariantInterfaceMethodToVirtualMethodOnType(MethodDesc interfaceMethod, TypeDesc currentType)
663public override MethodDesc ResolveInterfaceMethodToStaticVirtualMethodOnType(MethodDesc interfaceMethod, TypeDesc currentType)
668public override MethodDesc ResolveVariantInterfaceMethodToStaticVirtualMethodOnType(MethodDesc interfaceMethod, TypeDesc currentType)
698private static MethodDesc ResolveInterfaceMethodToVirtualMethodOnType(MethodDesc interfaceMethod, MetadataType currentType, bool returnRecursive = false)
707MethodDesc methodImpl = FindImplFromDeclFromMethodImpls(currentType, interfaceMethod);
719MethodDesc foundOnCurrentType = FindMatchingVirtualMethodOnTypeByNameAndSig(interfaceMethod, currentType,
750MethodDesc baseClassImplementationOfInterfaceMethod = ResolveInterfaceMethodToVirtualMethodOnTypeRecursive(interfaceMethod, baseType);
757MethodDesc foundOnCurrentType = FindMatchingVirtualMethodOnTypeByNameAndSig(interfaceMethod, currentType,
771public static MethodDesc ResolveVariantInterfaceMethodToVirtualMethodOnType(MethodDesc interfaceMethod, MetadataType currentType)
777MethodDesc implMethod;
802private static MethodDesc ResolveInterfaceMethodToVirtualMethodOnTypeRecursive(MethodDesc interfaceMethod, MetadataType currentType)
817MethodDesc currentTypeInterfaceResolution = ResolveInterfaceMethodToVirtualMethodOnType(interfaceMethod, currentType, returnRecursive: true);
826private static MethodDesc FindNameSigOverrideForInterfaceMethodRecursive(MethodDesc interfaceMethod, MetadataType currentType)
833MethodDesc nameSigOverride = FindMatchingVirtualMethodOnTypeByNameAndSig(interfaceMethod, currentType,
846public override DefaultInterfaceMethodResolution ResolveInterfaceMethodToDefaultImplementationOnType(MethodDesc interfaceMethod, TypeDesc currentType, out MethodDesc impl)
851public override DefaultInterfaceMethodResolution ResolveVariantInterfaceMethodToDefaultImplementationOnType(MethodDesc interfaceMethod, TypeDesc currentType, out MethodDesc impl)
856public static DefaultInterfaceMethodResolution ResolveVariantInterfaceMethodToDefaultImplementationOnType(MethodDesc interfaceMethod, MetadataType currentType, out MethodDesc impl)
867MethodDesc interfaceMethod,
870out MethodDesc candidateMD)
873MethodDesc interfaceMethodDefinition = interfaceMethod.GetMethodDefinition();
929MethodDesc interfaceMethod,
932out MethodDesc impl)
935MethodDesc interfaceMethodDefinition = interfaceMethod.GetMethodDefinition();
951MethodDesc[] candidateMethods = new MethodDesc[consideredInterfaces.Length];
971if (!TryGetCandidateImplementation(currentMT, interfaceMethod, interfaceMT, allowVariance, out MethodDesc currentMD))
1044MethodDesc bestCandidateMD = null;
1083public override IEnumerable<MethodDesc> ComputeAllVirtualSlots(TypeDesc type)
1089public static IEnumerable<MethodDesc> EnumAllVirtualSlots(MetadataType type)
1093private static IEnumerable<MethodDesc> EnumAllVirtualSlotsOnClass(MetadataType type)
1098foreach (MethodDesc m in type.GetAllVirtualMethods())
1100MethodDesc possibleVirtual = FindSlotDefiningMethodForVirtualMethod(m);
1118public static MethodDesc ResolveInterfaceMethodToStaticVirtualMethodOnType(MethodDesc interfaceMethod, MetadataType currentType)
1128MethodDesc resolvedMethodOnType = TryResolveVirtualStaticMethodOnThisType(typeToCheck, interfaceMethod);
1143public static MethodDesc ResolveVariantInterfaceMethodToStaticVirtualMethodOnType(MethodDesc interfaceMethod, MetadataType currentType)
1150MethodDesc resolvedMethodOnType = TryResolveVirtualStaticMethodOnThisType(typeToCheck, interfaceMethod);
1175MethodDesc runtimeInterfaceMethod = runtimeInterfaceType.FindMethodOnExactTypeWithMatchingTypicalMethod(interfaceMethod);
1193private static MethodDesc TryResolveVirtualStaticMethodOnThisType(MetadataType constrainedType, MethodDesc interfaceMethod)
1201MethodDesc interfaceMethodDefinition = interfaceMethod.GetMethodDefinition();
1206MethodDesc resolvedMethodImpl = methodImpl.Body;
parent\parent\Common\TypeSystem\Common\TypeSystemHelpers.cs (35)
30public static InstantiatedMethod MakeInstantiatedMethod(this MethodDesc methodDef, Instantiation instantiation)
35public static InstantiatedMethod MakeInstantiatedMethod(this MethodDesc methodDef, params TypeDesc[] genericParameters)
86public static MethodDesc GetParameterlessConstructor(this TypeDesc type)
98internal static MethodDesc FindMethodOnExactTypeWithMatchingTypicalMethod(this TypeDesc type, MethodDesc method)
100MethodDesc methodTypicalDefinition = method.GetTypicalMethodDefinition();
129public static MethodDesc FindMethodOnTypeWithMatchingTypicalMethod(this TypeDesc targetType, MethodDesc method)
152MethodDesc matchingMethod = targetOrBase.FindMethodOnExactTypeWithMatchingTypicalMethod(method);
165public static IEnumerable<MethodDesc> GetAllMethods(this TypeDesc type)
173public static IEnumerable<MethodDesc> GetAllVirtualMethods(this TypeDesc type)
178public static IEnumerable<MethodDesc> EnumAllVirtualSlots(this TypeDesc type)
187public static MethodDesc ResolveInterfaceMethodToVirtualMethodOnType(this TypeDesc type, MethodDesc interfaceMethod)
192public static MethodDesc ResolveVariantInterfaceMethodToVirtualMethodOnType(this TypeDesc type, MethodDesc interfaceMethod)
197public static MethodDesc ResolveInterfaceMethodToStaticVirtualMethodOnType(this TypeDesc type, MethodDesc interfaceMethod)
202public static MethodDesc ResolveVariantInterfaceMethodToStaticVirtualMethodOnType(this TypeDesc type, MethodDesc interfaceMethod)
207public static DefaultInterfaceMethodResolution ResolveInterfaceMethodToDefaultImplementationOnType(this TypeDesc type, MethodDesc interfaceMethod, out MethodDesc implMethod)
212public static DefaultInterfaceMethodResolution ResolveVariantInterfaceMethodToDefaultImplementationOnType(this TypeDesc type, MethodDesc interfaceMethod, out MethodDesc implMethod)
220public static MethodDesc FindVirtualFunctionTargetMethodOnObjectType(this TypeDesc type, MethodDesc targetMethod)
271public static MethodDesc InstantiateAsOpen(this MethodDesc method)
290public static MethodDesc ResolveInterfaceMethodTarget(this TypeDesc thisType, MethodDesc interfaceMethodToResolve)
294MethodDesc result;
310public static MethodDesc ResolveInterfaceMethodTargetWithVariance(this TypeDesc thisType, MethodDesc interfaceMethodToResolve)
314MethodDesc result;
374public static bool RequiresSlotUnification(this MethodDesc method)
parent\parent\Common\TypeSystem\IL\HelperExtensions.cs (8)
30public static MethodDesc GetHelperEntryPoint(this TypeSystemContext context, ReadOnlySpan<byte> typeName, ReadOnlySpan<byte> methodName)
33MethodDesc helperMethod = helperType.GetKnownMethod(methodName, null);
37public static MethodDesc GetCoreLibEntryPoint(this TypeSystemContext context, ReadOnlySpan<byte> namespaceName, ReadOnlySpan<byte> typeName, ReadOnlySpan<byte> methodName, MethodSignature signature)
43public static MethodDesc GetOptionalHelperEntryPoint(this TypeSystemContext context, ReadOnlySpan<byte> typeName, ReadOnlySpan<byte> methodName)
46MethodDesc helperMethod = helperType?.GetMethod(methodName, null);
55public static void EmitCallThrowHelper(this ILCodeStream codeStream, ILEmitter emitter, MethodDesc method)
74public static MethodDesc GetKnownMethod(this TypeDesc type, ReadOnlySpan<byte> name, MethodSignature signature)
76MethodDesc method = type.GetMethod(name, signature);