Esempio n. 1
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);
            }
        }
Esempio n. 2
0
 internal GenericParam(PEReader buff)
     : base(VAR)
 {
     Contract.Requires(buff != null);
     index    = buff.ReadUInt16();
     flags    = buff.ReadUInt16();
     parentIx = buff.GetCodedIndex(CIx.TypeOrMethodDef);
     name     = buff.GetString();
     if (extraField)
     {
         kind = buff.ReadUInt16();
     }
     tabIx = MDTable.GenericParam;
     // resolve generic param immediately for signature resolution
     parent = buff.GetCodedElement(CIx.TypeOrMethodDef, parentIx);
     if (parent != null)
     {
         if (parent is MethodDef)
         {
             typeIndex = MVAR;
             ((MethodDef)parent).AddGenericParam(this);
         }
         else
         {
             ((ClassDef)parent).AddGenericParam(this);
         }
     }
 }
Esempio n. 3
0
 internal override void Resolve(PEReader buff)
 {
     implementation = buff.GetCodedElement(CIx.Implementation, implIx);
     while (implementation is ExternClass)
     {
         implementation = ((ExternClass)implementation).implementation;
     }
     ((ModuleFile)implementation).fileModule.AddExternClass(this);
 }
Esempio n. 4
0
 internal void CheckParent(MethodDef paren, PEReader buff)
 {
     Contract.Requires(buff != null);
     if (paren == buff.GetCodedElement(CIx.TypeOrMethodDef, parentIx))
     {
         parent = paren;
         paren.InsertGenericParam(this);
     }
 }
Esempio n. 5
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);
                    }
                }
            }
        }
Esempio n. 6
0
        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);
        }
Esempio n. 7
0
 internal override void Resolve(PEReader buff)
 {
     field = buff.GetCodedElement(CIx.HasFieldMarshal, parentIx);
     nt    = buff.GetBlobNativeType(ntIx);
     if (field is FieldDef)
     {
         ((FieldDef)field).SetMarshalType(nt);
     }
     else
     {
         ((Param)field).SetMarshalType(nt);
     }
 }
Esempio n. 8
0
 internal override void Resolve(PEReader buff)
 {
     methParent = (Method)buff.GetCodedElement(CIx.MethodDefOrRef, parentIx);
     buff.currentMethodScope = methParent; // set scopes - Fix by CK
     buff.currentClassScope  = (Class)methParent.GetParent();
     //
     // EXPERIMENTAL: The signature of the methParent must be
     // visible as the signature of this MethodSpec.  The type-actuals
     // are held in the instTypes array.
     this.sig        = this.methParent.GetSig(buff);
     instTypes       = buff.ReadMethSpecSig(instIx);
     this.unresolved = false;
     //
     buff.currentMethodScope = null;
     buff.currentClassScope  = null;
 }
Esempio n. 9
0
        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);
        }
Esempio n. 10
0
 internal override void Resolve(PEReader buff)
 {
     eventType = (Type)buff.GetCodedElement(CIx.TypeDefOrRef, typeIx);
 }
Esempio n. 11
0
 internal override void Resolve(PEReader buff)
 {
     parent = buff.GetCodedElement(CIx.HasConstant, parentIx);
     if (parent != null)
     {
         if (parent is Param) ((Param)parent).AddDefaultValue(cValue);
         else if (parent is FieldDef) ((FieldDef)parent).AddValue(cValue);
         else ((Property)parent).AddInitValue(cValue);
     }
 }
Esempio n. 12
0
 internal override void Resolve(PEReader buff)
 {
     meth = (MethodDef)buff.GetElement(MDTable.Method, methIx);
     eventOrProp = (Feature)buff.GetCodedElement(CIx.HasSemantics, assocIx);
     eventOrProp.AddMethod(this);
 }
Esempio n. 13
0
 internal override void Resolve(PEReader buff)
 {
     body = (Method)buff.GetCodedElement(CIx.MethodDefOrRef, methBodyIx);
     header = (Method)buff.GetCodedElement(CIx.MethodDefOrRef, methDeclIx);
     parent = (ClassDef)buff.GetElement(MDTable.TypeDef, classIx);
     parent.AddMethodImpl(this);
     resolved = true;
 }