internal static TypeReference LoadTypeDef(Module module, int rid, bool?isValueType = null) { var image = module.Image; var typeRef = image.TypeSignatures[rid - 1]; if (typeRef != null) { if (isValueType.HasValue) { typeRef._isValueType = isValueType; } return(typeRef); } TypeDefRow row; image.GetTypeDef(rid, out row); typeRef = new TypeReference(); typeRef._name = image.GetString(row.Name); typeRef._namespace = image.GetString(row.Namespace); // Owner int enclosingRID; if (image.GetEnclosingTypeByNested(rid, out enclosingRID)) { typeRef._owner = LoadTypeDef(module, enclosingRID); } else { typeRef._owner = ModuleReference.LoadDef(module); } module.AddSignature(ref typeRef); image.TypeSignatures[rid - 1] = typeRef; // Is value type. if (isValueType.HasValue) { typeRef._isValueType = isValueType.Value; } else { int extendsToken = MetadataToken.DecompressTypeDefOrRef(row.Extends); if (!MetadataToken.IsNull(extendsToken)) { var baseType = TypeSignature.Load(module, extendsToken); typeRef._isValueType = GetIsValueType(typeRef, baseType, module); } } return(typeRef); }
protected void LaodBaseType() { _opFlags = _opFlags.SetBitAtIndex(LoadBaseTypeFlag, false); var image = _module.Image; int extendsToken = MetadataToken.DecompressTypeDefOrRef(image.GetTypeDefExtends(_rid)); if (MetadataToken.IsNull(extendsToken)) { return; } _baseType = TypeSignature.Load(_module, extendsToken); }