private ISymbolNode CreateMethodHandleHelper(MethodWithToken method, SignatureContext signatureContext) { return(new PrecodeHelperImport( _codegenNodeFactory, _codegenNodeFactory.MethodSignature( ReadyToRunFixupKind.READYTORUN_FIXUP_MethodHandle, method.Method, constrainedType: null, method.Token, isUnboxingStub: false, isInstantiatingStub: false, signatureContext))); }
private ISymbolNode CreateMethodHandleHelper(MethodWithToken method, SignatureContext signatureContext) { bool useInstantiatingStub = method.Method.GetCanonMethodTarget(CanonicalFormKind.Specific) != method.Method; return(new PrecodeHelperImport( _codegenNodeFactory, _codegenNodeFactory.MethodSignature( ReadyToRunFixupKind.READYTORUN_FIXUP_MethodHandle, method, isUnboxingStub: false, isInstantiatingStub: useInstantiatingStub, signatureContext))); }
private ISymbolNode CreateVirtualCallHelper(MethodWithToken methodWithToken, SignatureContext signatureContext) { return(new DelayLoadHelperImport( _codegenNodeFactory, _codegenNodeFactory.DispatchImports, ILCompiler.DependencyAnalysis.ReadyToRun.ReadyToRunHelper.READYTORUN_HELPER_DelayLoad_Helper_Obj, _codegenNodeFactory.MethodSignature( ReadyToRunFixupKind.READYTORUN_FIXUP_VirtualEntry, methodWithToken.Method, constrainedType: null, methodWithToken.Token, signatureContext: signatureContext, isUnboxingStub: false, isInstantiatingStub: false))); }
private void CreateNodeCaches() { _importStrings = new NodeCache <ModuleTokenAndSignatureContext, ISymbolNode>(key => { return(new StringImport(_codegenNodeFactory.StringImports, key.ModuleToken, key.SignatureContext)); }); _r2rHelpers = new NodeCache <ReadyToRunHelperKey, ISymbolNode>(CreateReadyToRunHelper); _fieldAddressCache = new NodeCache <FieldAndSignatureContext, ISymbolNode>(key => { return(new DelayLoadHelperImport( _codegenNodeFactory, _codegenNodeFactory.HelperImports, ReadyToRunHelper.DelayLoad_Helper, new FieldFixupSignature(ReadyToRunFixupKind.FieldAddress, key.Field, key.SignatureContext) )); }); _fieldOffsetCache = new NodeCache <FieldAndSignatureContext, ISymbolNode>(key => { return(new PrecodeHelperImport( _codegenNodeFactory, new FieldFixupSignature(ReadyToRunFixupKind.FieldOffset, key.Field, key.SignatureContext) )); }); _fieldBaseOffsetCache = new NodeCache <TypeAndSignatureContext, ISymbolNode>(key => { return(new PrecodeHelperImport( _codegenNodeFactory, _codegenNodeFactory.TypeSignature(ReadyToRunFixupKind.FieldBaseOffset, key.Type, key.SignatureContext) )); }); _interfaceDispatchCells = new NodeCache <MethodAndCallSite, ISymbolNode>(cellKey => { return(new DelayLoadHelperMethodImport( _codegenNodeFactory, _codegenNodeFactory.DispatchImports, ReadyToRunHelper.DelayLoad_MethodCall, cellKey.Method, useVirtualCall: true, useInstantiatingStub: false, _codegenNodeFactory.MethodSignature(ReadyToRunFixupKind.VirtualEntry, cellKey.Method, cellKey.IsUnboxingStub, isInstantiatingStub: false, cellKey.SignatureContext), cellKey.SignatureContext, cellKey.CallSite)); }); _delegateCtors = new NodeCache <TypeAndMethod, ISymbolNode>(ctorKey => { SignatureContext signatureContext = ctorKey.SignatureContext; IMethodNode targetMethodNode = _codegenNodeFactory.MethodEntrypoint( ctorKey.Method, isUnboxingStub: false, isInstantiatingStub: ctorKey.Method.Method.HasInstantiation, isPrecodeImportRequired: false, signatureContext: signatureContext); return(new DelayLoadHelperImport( _codegenNodeFactory, _codegenNodeFactory.HelperImports, ReadyToRunHelper.DelayLoad_Helper_ObjObj, new DelegateCtorSignature(ctorKey.Type, targetMethodNode, ctorKey.Method.Token, signatureContext))); }); _genericLookupHelpers = new NodeCache <GenericLookupKey, ISymbolNode>(key => { return(new DelayLoadHelperImport( _codegenNodeFactory, _codegenNodeFactory.HelperImports, ReadyToRunHelper.DelayLoad_Helper, new GenericLookupSignature( key.LookupKind, key.FixupKind, key.TypeArgument, key.MethodArgument, key.FieldArgument, key.MethodContext, key.SignatureContext))); }); _pInvokeTargetNodes = new NodeCache <PInvokeTargetKey, ISymbolNode>(key => { return(new PrecodeHelperImport( _codegenNodeFactory, _codegenNodeFactory.MethodSignature( key.IsIndirect ? ReadyToRunFixupKind.IndirectPInvokeTarget : ReadyToRunFixupKind.PInvokeTarget, key.MethodWithToken, signatureContext: key.SignatureContext, isUnboxingStub: false, isInstantiatingStub: false))); }); }