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 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); } } }
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); }
internal void CheckParent(MethodDef paren, PEReader buff) { Contract.Requires(buff != null); if (paren == buff.GetCodedElement(CIx.TypeOrMethodDef, parentIx)) { parent = paren; paren.InsertGenericParam(this); } }
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 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); }
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); } }
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; }
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); }
internal override void Resolve(PEReader buff) { eventType = (Type)buff.GetCodedElement(CIx.TypeDefOrRef, typeIx); }
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); } }
internal override void Resolve(PEReader buff) { meth = (MethodDef)buff.GetElement(MDTable.Method, methIx); eventOrProp = (Feature)buff.GetCodedElement(CIx.HasSemantics, assocIx); eventOrProp.AddMethod(this); }
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; }