public unsafe static bool TryGetTypeReferenceForNamedType(RuntimeTypeHandle runtimeTypeHandle, out MetadataReader metadataReader, out TypeReferenceHandle typeRefHandle)
        {
            // Iterate over all modules, starting with the module that defines the EEType
            foreach (IntPtr moduleHandle in ModuleList.Enumerate(RuntimeAugments.GetModuleFromTypeHandle(runtimeTypeHandle)))
            {
                MetadataTable mapTable = MetadataTable.CreateTypeMapTable(moduleHandle);
                foreach (var ptrEntry in mapTable)
                {
                    var pCurrentEntry = (TypeMapEntry *)ptrEntry;
                    RuntimeTypeHandle entryTypeHandle     = RuntimeAugments.CreateRuntimeTypeHandle(pCurrentEntry->EEType);
                    Handle            entryMetadataHandle = pCurrentEntry->TypeDefinitionHandle.AsHandle();
                    if (entryTypeHandle.Equals(runtimeTypeHandle) &&
                        entryMetadataHandle.HandleType == HandleType.TypeReference)
                    {
                        metadataReader = ModuleList.Instance.GetMetadataReaderForModule(moduleHandle);
                        typeRefHandle  = entryMetadataHandle.ToTypeReferenceHandle(metadataReader);
                        return(true);
                    }
                }
            }

            metadataReader = null;
            typeRefHandle  = default(TypeReferenceHandle);

            return(false);
        }
 internal static unsafe RuntimeTypeHandle RvaToRuntimeTypeHandle(IntPtr moduleHandle, uint rva)
 {
     if ((rva & RVAIsIndirect) != 0)
     {
         return(RuntimeAugments.CreateRuntimeTypeHandle(*(IntPtr *)((byte *)moduleHandle.ToPointer() + (rva & ~RVAIsIndirect))));
     }
     return(RuntimeAugments.CreateRuntimeTypeHandle((IntPtr)((byte *)moduleHandle.ToPointer() + rva)));
 }
Example #3
0
        public RuntimeTypeHandle GetRuntimeTypeHandleFromIndex(uint index)
        {
            if (isDebuggerPrepared)
            {
                return(typeof(int).TypeHandle);
            }

            return(RuntimeAugments.CreateRuntimeTypeHandle(GetIntPtrFromIndex(index)));
        }
Example #4
0
 public RuntimeTypeHandle GetRuntimeTypeHandleFromIndex(uint index)
 {
     if (this.debuggerPreparedExternalReferences == null)
     {
         return(RuntimeAugments.CreateRuntimeTypeHandle(GetIntPtrFromIndex(index)));
     }
     else
     {
         return(RuntimeAugments.CreateRuntimeTypeHandle((IntPtr)this.debuggerPreparedExternalReferences[index]));
     }
 }
        public unsafe bool TryGetNamedTypeForMetadata(MetadataReader metadataReader, TypeDefinitionHandle typeDefHandle, out RuntimeTypeHandle runtimeTypeHandle)
        {
            IntPtr        moduleHandle = ModuleList.Instance.GetModuleForMetadataReader(metadataReader);
            MetadataTable mapTable     = MetadataTable.CreateTypeMapTable(moduleHandle);

            foreach (var ptrEntry in mapTable)
            {
                TypeMapEntry *pCurrentEntry = (TypeMapEntry *)ptrEntry;
                if (pCurrentEntry->TypeDefinitionHandle.AsHandle().Equals(typeDefHandle))
                {
                    runtimeTypeHandle = RuntimeAugments.CreateRuntimeTypeHandle(pCurrentEntry->EEType);
                    return(true);
                }
            }

            runtimeTypeHandle = default(RuntimeTypeHandle);
            return(false);
        }
 public RuntimeTypeHandle GetRuntimeTypeHandleFromIndex(uint index)
 {
     return(RuntimeAugments.CreateRuntimeTypeHandle(GetIntPtrFromIndex(index)));
 }