public ISymbolNode FieldAddress(FieldDesc fieldDesc, SignatureContext signatureContext) { ISymbolNode result; if (!_fieldAddressCache.TryGetValue(fieldDesc, out result)) { result = new DelayLoadHelperImport( _codegenNodeFactory, _codegenNodeFactory.HelperImports, ILCompiler.DependencyAnalysis.ReadyToRun.ReadyToRunHelper.READYTORUN_HELPER_DelayLoad_Helper, new FieldFixupSignature(ReadyToRunFixupKind.READYTORUN_FIXUP_FieldAddress, fieldDesc, signatureContext)); _fieldAddressCache.Add(fieldDesc, result); } return(result); }
public ISymbolNode InterfaceDispatchCell(MethodDesc method, ModuleToken methodToken, SignatureContext signatureContext, bool isUnboxingStub, string callSite) { MethodAndCallSite cellKey = new MethodAndCallSite(method, callSite); if (!_interfaceDispatchCells.TryGetValue(cellKey, out ISymbolNode dispatchCell)) { dispatchCell = new DelayLoadHelperImport( _codegenNodeFactory, _codegenNodeFactory.DispatchImports, ILCompiler.DependencyAnalysis.ReadyToRun.ReadyToRunHelper.READYTORUN_HELPER_DelayLoad_MethodCall | ILCompiler.DependencyAnalysis.ReadyToRun.ReadyToRunHelper.READYTORUN_HELPER_FLAG_VSD, _codegenNodeFactory.MethodSignature(ReadyToRunFixupKind.READYTORUN_FIXUP_VirtualEntry, method, null, methodToken, signatureContext, isUnboxingStub, isInstantiatingStub: false), callSite); _interfaceDispatchCells.Add(cellKey, dispatchCell); } return(dispatchCell); }
private ISymbolNode GenericLookupMethodHelper( CORINFO_RUNTIME_LOOKUP_KIND runtimeLookupKind, ReadyToRunFixupKind fixupKind, MethodWithToken methodArgument, TypeDesc contextType, SignatureContext signatureContext) { GenericLookupKey key = new GenericLookupKey(runtimeLookupKind, fixupKind, typeArgument: null, methodArgument, contextType); ISymbolNode node; if (!_genericLookupHelpers.TryGetValue(key, out node)) { node = new DelayLoadHelperImport( _codegenNodeFactory, _codegenNodeFactory.HelperImports, ILCompiler.DependencyAnalysis.ReadyToRun.ReadyToRunHelper.READYTORUN_HELPER_DelayLoad_Helper, new GenericLookupSignature(runtimeLookupKind, fixupKind, typeArgument: null, methodArgument, contextType, signatureContext)); _genericLookupHelpers.Add(key, node); } return(node); }
private ISymbolNode GenericLookupFieldHelper( CORINFO_RUNTIME_LOOKUP_KIND runtimeLookupKind, ReadyToRunFixupKind fixupKind, FieldDesc fieldArgument, GenericContext methodContext, SignatureContext signatureContext) { GenericLookupKey key = new GenericLookupKey(runtimeLookupKind, fixupKind, typeArgument: null, methodArgument: null, fieldArgument: fieldArgument, methodContext); ISymbolNode node; if (!_genericLookupHelpers.TryGetValue(key, out node)) { node = new DelayLoadHelperImport( _codegenNodeFactory, _codegenNodeFactory.HelperImports, ILCompiler.ReadyToRunHelper.DelayLoad_Helper, new GenericLookupSignature(runtimeLookupKind, fixupKind, typeArgument: null, methodArgument: null, fieldArgument: fieldArgument, methodContext, signatureContext)); _genericLookupHelpers.Add(key, node); } return(node); }
public ISymbolNode DelegateCtor(TypeDesc delegateType, MethodWithToken method, SignatureContext signatureContext) { TypeAndMethod ctorKey = new TypeAndMethod(delegateType, method, isUnboxingStub: false, isInstantiatingStub: false); if (!_delegateCtors.TryGetValue(ctorKey, out ISymbolNode ctorNode)) { IMethodNode targetMethodNode = _codegenNodeFactory.MethodEntrypoint( method, isUnboxingStub: false, isInstantiatingStub: false, signatureContext: signatureContext); ctorNode = new DelayLoadHelperImport( _codegenNodeFactory, _codegenNodeFactory.HelperImports, ILCompiler.ReadyToRunHelper.DelayLoad_Helper, new DelegateCtorSignature(delegateType, targetMethodNode, method.Token, signatureContext)); _delegateCtors.Add(ctorKey, ctorNode); } return(ctorNode); }
public ISymbolNode DynamicHelperCell(MethodWithToken methodWithToken, SignatureContext signatureContext) { ISymbolNode result; if (!_dynamicHelperCellCache.TryGetValue(methodWithToken, out result)) { result = new DelayLoadHelperImport( this, DispatchImports, ILCompiler.DependencyAnalysis.ReadyToRun.ReadyToRunHelper.READYTORUN_HELPER_DelayLoad_Helper_Obj, MethodSignature( ReadyToRunFixupKind.READYTORUN_FIXUP_VirtualEntry, methodWithToken.Method, constrainedType: null, methodWithToken.Token, signatureContext: signatureContext, isUnboxingStub: false, isInstantiatingStub: false)); _dynamicHelperCellCache.Add(methodWithToken, result); } return(result); }
public ISymbolNode DelegateCtor(TypeDesc delegateType, MethodDesc targetMethod, ModuleToken methodToken, SignatureContext signatureContext) { TypeAndMethod ctorKey = new TypeAndMethod(delegateType, targetMethod, methodToken: methodToken, isUnboxingStub: false, isInstantiatingStub: false); if (!_delegateCtors.TryGetValue(ctorKey, out ISymbolNode ctorNode)) { IMethodNode targetMethodNode = _codegenNodeFactory.MethodEntrypoint( targetMethod, constrainedType: null, originalMethod: null, methodToken: methodToken, signatureContext: signatureContext, isUnboxingStub: false); ctorNode = new DelayLoadHelperImport( _codegenNodeFactory, _codegenNodeFactory.HelperImports, ILCompiler.DependencyAnalysis.ReadyToRun.ReadyToRunHelper.READYTORUN_HELPER_DelayLoad_Helper, new DelegateCtorSignature(delegateType, targetMethodNode, methodToken, signatureContext)); _delegateCtors.Add(ctorKey, ctorNode); } return(ctorNode); }
private ISymbolNode GenericLookupTypeHelper( CORINFO_RUNTIME_LOOKUP_KIND runtimeLookupKind, ReadyToRunFixupKind fixupKind, object helperArgument, GenericContext methodContext, SignatureContext signatureContext) { TypeDesc typeArgument; if (helperArgument is MethodWithToken methodWithToken) { typeArgument = methodWithToken.Method.OwningType; } else if (helperArgument is FieldDesc fieldDesc) { typeArgument = fieldDesc.OwningType; } else { typeArgument = (TypeDesc)helperArgument; } GenericLookupKey key = new GenericLookupKey(runtimeLookupKind, fixupKind, typeArgument, methodArgument: null, fieldArgument: null, methodContext); ISymbolNode node; if (!_genericLookupHelpers.TryGetValue(key, out node)) { node = new DelayLoadHelperImport( _codegenNodeFactory, _codegenNodeFactory.HelperImports, ILCompiler.DependencyAnalysis.ReadyToRun.ReadyToRunHelper.READYTORUN_HELPER_DelayLoad_Helper, new GenericLookupSignature(runtimeLookupKind, fixupKind, typeArgument, methodArgument: null, fieldArgument: null, methodContext, signatureContext)); _genericLookupHelpers.Add(key, node); } return(node); }