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))); }
public RuntimeTypeHandle GetRuntimeTypeHandleFromIndex(uint index) { if (isDebuggerPrepared) { return(typeof(int).TypeHandle); } return(RuntimeAugments.CreateRuntimeTypeHandle(GetIntPtrFromIndex(index))); }
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))); }