// get the generics hash table and external references table for a module // TODO multi-file: consider whether we want to cache this info private unsafe bool GetHashtableFromBlob(NativeFormatModuleInfo module, ReflectionMapBlob blobId, out NativeHashtable hashtable, out ExternalReferencesTable externalReferencesLookup) { byte* pBlob; uint cbBlob; hashtable = default(NativeHashtable); externalReferencesLookup = default(ExternalReferencesTable); if (!module.TryFindBlob(blobId, out pBlob, out cbBlob)) return false; NativeReader reader = new NativeReader(pBlob, cbBlob); NativeParser parser = new NativeParser(reader, 0); hashtable = new NativeHashtable(parser); return externalReferencesLookup.InitializeNativeReferences(module); }
// get the generics hash table and external references table for a module // TODO multi-file: consider whether we want to cache this info private unsafe bool GetHashtableFromBlob(IntPtr moduleHandle, ReflectionMapBlob blobId, out NativeHashtable hashtable, out ExternalReferencesTable externalReferencesLookup) { byte* pBlob; uint cbBlob; hashtable = default(NativeHashtable); externalReferencesLookup = default(ExternalReferencesTable); if (!RuntimeAugments.FindBlob(moduleHandle, (int)blobId, new IntPtr(&pBlob), new IntPtr(&cbBlob))) return false; NativeReader reader = new NativeReader(pBlob, cbBlob); NativeParser parser = new NativeParser(reader, 0); hashtable = new NativeHashtable(parser); return externalReferencesLookup.InitializeNativeReferences(moduleHandle); }
// get the statics hash table, external references, and static info table for a module // TODO multi-file: consider whether we want to cache this info private unsafe bool GetStaticsInfoHashtable(IntPtr moduleHandle, out NativeHashtable staticsInfoHashtable, out ExternalReferencesTable externalReferencesLookup, out ExternalReferencesTable staticInfoLookup) { byte* pBlob; uint cbBlob; staticsInfoHashtable = default(NativeHashtable); externalReferencesLookup = default(ExternalReferencesTable); staticInfoLookup = default(ExternalReferencesTable); // Load statics info hashtable if (!RuntimeAugments.FindBlob(moduleHandle, (int)ReflectionMapBlob.StaticsInfoHashtable, new IntPtr(&pBlob), new IntPtr(&cbBlob))) return false; NativeReader reader = new NativeReader(pBlob, cbBlob); NativeParser parser = new NativeParser(reader, 0); if (!externalReferencesLookup.InitializeNativeReferences(moduleHandle)) return false; if (!staticInfoLookup.InitializeNativeStatics(moduleHandle)) return false; staticsInfoHashtable = new NativeHashtable(parser); return true; }