private InsertInTable ( MDTable tabIx, uint ix, |
||
tabIx | MDTable | |
ix | uint | |
elem | ||
return | void |
internal virtual void ResolveParent(PEReader buff, bool isExtern) { CIx cIx = CIx.ResolutionScope; if (isExtern) cIx = CIx.Implementation; if (scope != null) return; MetaDataElement parentScope = buff.GetCodedElement(cIx,resScopeIx); if (parentScope is Module) { // special code for glitch in Everett ilasm ClassDef newDef = new ClassDef((PEFile)parentScope,0,nameSpace,name); ((Module)parentScope).AddToClassList(newDef); buff.InsertInTable(MDTable.TypeRef,Row,newDef); } else { scope = (ReferenceScope)buff.GetCodedElement(cIx,resScopeIx); ClassRef existing = (ClassRef)scope.GetExistingClass(nameSpace,name); if (existing == null) { scope.AddToClassList(this); } else { if (isExtern) buff.InsertInTable(MDTable.ExportedType,Row,existing); else buff.InsertInTable(MDTable.TypeRef,Row,existing); } } }
internal override void ResolveParent(PEReader buff, bool isExtern) { if (parent != null) return; CIx cIx = CIx.ResolutionScope; if (isExtern) cIx = CIx.Implementation; parent = (ClassRef)buff.GetCodedElement(cIx,resScopeIx); parent.ResolveParent(buff,isExtern); parent = (ClassRef)buff.GetCodedElement(cIx,resScopeIx); if (parent == null) return; NestedClassRef existing = parent.GetNestedClass(name); if (existing == null) { scope = parent.GetScope(); parent.AddToClassList(this); } else if (isExtern) buff.InsertInTable(MDTable.ExportedType,Row,existing); else buff.InsertInTable(MDTable.TypeRef,Row,existing); }
internal override void Resolve(PEReader buff) { buff.InsertInTable(MDTable.TypeSpec,Row,buff.GetBlobType(blobIx)); this.unresolved = false; }
internal static void Read(PEReader buff, TableRow[] maps, MDTable tab) { if (tab == MDTable.NestedClass) { for (int i=0; i < maps.Length; i++) { //maps[i] = new MapElem(buff,tab); uint nestClassIx = buff.GetIndex(MDTable.TypeDef); uint enclClassIx = buff.GetIndex(MDTable.TypeDef); ClassDef parent = (ClassDef)buff.GetElement(MDTable.TypeDef,enclClassIx); ClassDef nestClass = ((ClassDef)buff.GetElement(MDTable.TypeDef,nestClassIx)).MakeNestedClass(parent); buff.InsertInTable(MDTable.TypeDef,nestClass.Row,nestClass); } } else { // event or property map MapElem prev = new MapElem(buff,tab); maps[0] = prev; for (int i=1; i < maps.Length; i++) { maps[i] = new MapElem(buff,tab); prev.endIx = ((MapElem)maps[i]).elemIx; prev = (MapElem)maps[i]; } switch (tab) { case MDTable.PropertyMap: prev.endIx = buff.GetTableSize(MDTable.Property) + 1; break; case MDTable.EventMap: prev.endIx = buff.GetTableSize(MDTable.Event) + 1; break; default: prev.endIx = buff.GetTableSize(tab)+1; break; } } }