InsertInTable() private méthode

private InsertInTable ( MDTable tabIx, uint ix, MetaDataElement elem ) : void
tabIx MDTable
ix uint
elem MetaDataElement
Résultat void
Exemple #1
0
 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);
         }
     }
 }
Exemple #2
0
 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);
 }
Exemple #3
0
 internal override void Resolve(PEReader buff)
 {
     buff.InsertInTable(MDTable.TypeSpec,Row,buff.GetBlobType(blobIx));
     this.unresolved = false;
 }
Exemple #4
0
 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;
         }
     }
 }