wrapper for TypeSpec parent of MethodRef or FieldRef
Inheritance: Class
コード例 #1
0
ファイル: PERWAPI.cs プロジェクト: nomit007/f4
 internal override Member ResolveParent(PEReader buff)
 {
     if (parent != null) return this;
     MetaDataElement paren = buff.GetCodedElement(CIx.MemberRefParent,parentIx);
     //Console.WriteLine("parentIx = " + parentIx);
     //Console.WriteLine("paren = " + paren);
     if (paren is ClassDef)
         return((ClassDef)paren).GetField(this.name);
     //if (paren is ClassSpec)
     // paren = ((ClassSpec)paren).GetParent();
     if (paren is ReferenceScope)
         parent = ((ReferenceScope)paren).GetDefaultClass();
     if (paren is TypeSpec)
         parent = new ConstructedTypeSpec((TypeSpec)paren);
     else
         parent = (Class)paren;
     if (parent != null) {
         Field existing = (Field)((Class)parent).GetFieldDesc(name);
         if (existing != null) {
             return existing;
         }
     }
     parent.AddToFieldList(this);
     return this;
 }
コード例 #2
0
ファイル: PERWAPI.cs プロジェクト: nomit007/f4
 internal override Member ResolveParent(PEReader buff)
 {
     if (parent != null) return this;
     buff.currentMethodScope = this;
     MetaDataElement paren = buff.GetCodedElement(CIx.MemberRefParent,parentIx);
     buff.currentMethodScope = null;
     if (paren is MethodDef) {
         parent = null;
         varArgParent = (MethodDef)paren;
         //this.sig = buff.ReadMethSig(this,name,sigIx);
         ((MethodDef)paren).AddVarArgSig(this);
         return this;
     } else if (paren is ClassSpec) {
         ((ClassSpec)paren).AddMethod(this);
         return this;
     } else if (paren is PrimitiveType) {
         paren = MSCorLib.mscorlib.GetDefaultClass();
     } else if (paren is ClassDef) {
         this.sig = buff.ReadMethSig(this,name,sigIx);
         return ((ClassDef)paren).GetMethod(this.sig);
     } else if (paren is TypeSpec) {
         paren = new ConstructedTypeSpec((TypeSpec)paren);
         //Console.WriteLine("Got TypeSpec as parent of Member");
         //return this;
         //throw new Exception("Got TypeSpec as parent of Member");
         //((TypeSpec)paren).AddMethod(buff,this);
     }
     if (paren is ReferenceScope)
         parent = ((ReferenceScope)paren).GetDefaultClass();
     parent = (Class)paren;
     //if ((MethodRef)parent.GetMethodDesc(name) != null) throw new PEFileException("Existing method!!");
     //sig = buff.ReadMethSig(this,name,sigIx);
     //MethodRef existing = (MethodRef)parent.GetMethod(sig);
     //if (existing != null)
     //  return existing;
     parent.AddToMethodList(this);
     return this;
 }