Пример #1
0
        public unsafe static void SetInstantiation(RuntimeTypeHandle typeHandle, RuntimeTypeHandle genericTypeDefinitionHandle, RuntimeTypeHandle[] genericTypeArgumentHandles)
        {
            EETypePtr eeTypeDefinition = CreateEETypePtr(genericTypeDefinitionHandle);
            EETypePtr eeType           = CreateEETypePtr(typeHandle);

            int        arity           = genericTypeArgumentHandles.Length;
            EETypePtr *eeTypeArguments = stackalloc EETypePtr[genericTypeArgumentHandles.Length];

            for (int i = 0; i < arity; i++)
            {
                eeTypeArguments[i] = CreateEETypePtr(genericTypeArgumentHandles[i]);
            }

            if (!RuntimeImports.RhSetGenericInstantiation(eeType, eeTypeDefinition, arity, eeTypeArguments))
            {
                throw new OutOfMemoryException();
            }
        }
Пример #2
0
 internal static unsafe extern bool RhSetGenericInstantiation(EETypePtr pEEType, EETypePtr pEETypeDef, int arity, EETypePtr *pInstantiation);
Пример #3
0
        private static IntPtr RhResolveDispatchOnType(EETypePtr instanceType, EETypePtr interfaceType, ushort slot, EETypePtr *pGenericContext)
        {
            // Type of object we're dispatching on.
            MethodTable *pInstanceType = instanceType.ToPointer();

            // Type of interface
            MethodTable *pInterfaceType = interfaceType.ToPointer();

            return(DispatchResolve.FindInterfaceMethodImplementationTarget(pInstanceType,
                                                                           pInterfaceType,
                                                                           slot,
                                                                           (MethodTable **)pGenericContext));
        }
Пример #4
0
 internal static extern unsafe EETypePtr RhGetGenericInstantiation(EETypePtr pEEType, out int arity, out EETypePtr *ppInstantiation, out byte *varianceInfo);